Commit a0ab207a by Fernando Martínez Santiago

Merge branches 'develop' and 'fernando_branch' of…

Merge branches 'develop' and 'fernando_branch' of http://scm.ujaen.es/softuno/pictogram into develop
parents 8a840026 3ef05550
Showing with 1452 additions and 313 deletions
...@@ -5,7 +5,7 @@ buildscript { ...@@ -5,7 +5,7 @@ buildscript {
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:2.2.2' classpath 'com.android.tools.build:gradle:2.2.3'
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files
......
package com.yottacode.net; package com.yottacode.net;
import android.os.AsyncTask;
import android.os.StrictMode;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.InterfaceAddress;
import java.net.URL; import java.net.URL;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.Hashtable; import java.util.Hashtable;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;
import android.os.AsyncTask;
import android.os.StrictMode;
import android.util.Log;
import com.google.gson.JsonParser;
import com.koushikdutta.async.parser.JSONObjectParser;
import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.HttpsURLConnection;
...@@ -70,6 +62,7 @@ public class RestapiWrapper { ...@@ -70,6 +62,7 @@ public class RestapiWrapper {
ask(operation, params, postOrGet, false, listener); ask(operation, params, postOrGet, false, listener);
} }
public void ask(String operation, Hashtable<String, String> params, String postOrGet, boolean json, iRestapiListener listener) { public void ask(String operation, Hashtable<String, String> params, String postOrGet, boolean json, iRestapiListener listener) {
// call preExecute listener to show loading window // call preExecute listener to show loading window
listener.preExecute(); listener.preExecute();
// call AsynTask to perform network operation on separate thread // call AsynTask to perform network operation on separate thread
...@@ -137,16 +130,17 @@ public class RestapiWrapper { ...@@ -137,16 +130,17 @@ public class RestapiWrapper {
private static JSONObject resultToJSON(HttpURLConnection urlConnection) throws IOException { private static JSONObject resultToJSON(HttpURLConnection urlConnection) throws IOException {
int responseCode=urlConnection.getResponseCode(); int responseCode=urlConnection.getResponseCode();
String response="'"; StringBuilder response=new StringBuilder("");
String line; String line;
JSONObject JSONresponse; JSONObject JSONresponse;
BufferedReader br = new BufferedReader(new InputStreamReader(responseCode == HttpsURLConnection.HTTP_OK BufferedReader br = new BufferedReader(new InputStreamReader(responseCode == HttpsURLConnection.HTTP_OK
? urlConnection.getInputStream() ? urlConnection.getInputStream()
: urlConnection.getErrorStream())); : urlConnection.getErrorStream()));
// Log.i(com.yottacode.net.RestapiWrapper.class.getName(), "starting to read server answer for"+urlConnection.getURL().toString());
while ((line=br.readLine()) != null) { while ((line=br.readLine()) != null) {
response+=line; response.append(line);
} }
response+="'"; if (response.length()==0) response.append("{\"result\":null}");
try { try {
JSONresponse = new JSONObject("{ "+SERVER_RESULT+": " + response + (responseCode == HttpsURLConnection.HTTP_OK JSONresponse = new JSONObject("{ "+SERVER_RESULT+": " + response + (responseCode == HttpsURLConnection.HTTP_OK
...@@ -156,9 +150,11 @@ public class RestapiWrapper { ...@@ -156,9 +150,11 @@ public class RestapiWrapper {
JSONresponse = null; JSONresponse = null;
Log.e(RestapiWrapper.class.getCanonicalName(),e.getMessage()); Log.e(RestapiWrapper.class.getCanonicalName(),e.getMessage());
} }
Log.i(com.yottacode.net.RestapiWrapper.class.getName(), "server answer: " + JSONresponse.toString()); // Log.i(com.yottacode.net.RestapiWrapper.class.getName(), "server answer: " + JSONresponse.toString());
return JSONresponse; return JSONresponse;
} }
public static JSONObject GET(String surl, Hashtable<String, String> params) throws IOException { public static JSONObject GET(String surl, Hashtable<String, String> params) throws IOException {
URL url; URL url;
...@@ -231,7 +227,7 @@ public class RestapiWrapper { ...@@ -231,7 +227,7 @@ public class RestapiWrapper {
protected Hashtable<String, String> url_params; protected Hashtable<String, String> url_params;
protected boolean json_params; protected boolean json_params;
protected iRestapiListener listener; protected iRestapiListener listener;
protected String result; protected Object result;
protected Exception error; protected Exception error;
} }
private class HttpAsyncTask extends AsyncTask<HttpAsyncTaskParams, Void, HttpAsyncTaskParams> { private class HttpAsyncTask extends AsyncTask<HttpAsyncTaskParams, Void, HttpAsyncTaskParams> {
...@@ -241,11 +237,11 @@ public class RestapiWrapper { ...@@ -241,11 +237,11 @@ public class RestapiWrapper {
@Override @Override
protected HttpAsyncTaskParams doInBackground(HttpAsyncTaskParams... params) { protected HttpAsyncTaskParams doInBackground(HttpAsyncTaskParams... params) {
try { try {
Log.i(com.yottacode.net.RestapiWrapper.class.getName(), " asking to the server for " + params[0].url+" params:"+params[0].url_params +" JSON?"+params[0].json_params); Log.i(com.yottacode.net.RestapiWrapper.class.getName(), " Asking to the server for " + params[0].url+" params:"+params[0].url_params +" JSON?"+params[0].json_params);
JSONObject jresult = params[0].request_method.equalsIgnoreCase("GET") JSONObject jresult = params[0].request_method.equalsIgnoreCase("GET")
? GET(params[0].url, params[0].url_params) ? GET(params[0].url, params[0].url_params)
: POST(params[0].url, params[0].request_method, params[0].url_params, params[0].json_params); : POST(params[0].url, params[0].request_method, params[0].url_params, params[0].json_params);
params[0].result=jresult.getString(SERVER_RESULT); params[0].result=jresult.get(SERVER_RESULT);
if (jresult.has(SERVER_ERROR)) if (jresult.has(SERVER_ERROR))
params[0].error= new Exception(params[0].result+" (err code "+jresult.getString(SERVER_ERROR)+")"); params[0].error= new Exception(params[0].result+" (err code "+jresult.getString(SERVER_ERROR)+")");
} catch (Exception e) { } catch (Exception e) {
...@@ -259,27 +255,17 @@ public class RestapiWrapper { ...@@ -259,27 +255,17 @@ public class RestapiWrapper {
// onPostExecute displays the results of the AsyncTask. // onPostExecute displays the results of the AsyncTask.
@Override @Override
protected void onPostExecute(HttpAsyncTaskParams params) { protected void onPostExecute(HttpAsyncTaskParams params) {
try { if (params.error!=null) params.listener.error(params.error);
if (params.error!=null) params.listener.error(params.error); else {
else Object jsonResult = params.result;
if(params.result.length()>0) { if (jsonResult instanceof JSONObject) {
Log.i(LOG_TAG, "Picto JSON Result: " + params.result); // The result is an object
JSONTokener tokener=new JSONTokener(params.result); params.listener.result((JSONObject) jsonResult);
} else if (jsonResult instanceof JSONArray) {
Object jsonResult = new JSONTokener(params.result).nextValue(); // The result is an array
if (jsonResult instanceof JSONObject) { params.listener.result((JSONArray) jsonResult);
// The result is an object } else
params.listener.result((JSONObject) jsonResult);
} else if (jsonResult instanceof JSONArray) {
// The result is an array
params.listener.result((JSONArray) jsonResult);
} else
params.listener.result((JSONObject) null);
}else{
params.listener.result((JSONObject) null); params.listener.result((JSONObject) null);
}
} catch (JSONException e) {
params.listener.error(e);
} }
if (params.url_params!=null) params.url_params.clear(); if (params.url_params!=null) params.url_params.clear();
} }
......
package com.yottacode.pictogram.dao; package com.yottacode.pictogram.dao;
import android.graphics.Bitmap; import android.animation.ValueAnimator;
import android.graphics.Color; import android.graphics.Color;
import android.util.Log; import android.util.Log;
...@@ -21,11 +21,7 @@ import org.json.JSONObject; ...@@ -21,11 +21,7 @@ import org.json.JSONObject;
* @version 1.0 * @version 1.0
*/ */
public class Picto extends Img { public class Picto extends Img {
int cont = 0;
Bitmap bitmap;
// String constant for logs
private final String LOG_TAG = this.getClass().getSimpleName(); // Or .getCanonicalName()
public final static class JSON_ATTTRS { public final static class JSON_ATTTRS {
public static String CATEGORY = "id_cat"; public static String CATEGORY = "id_cat";
...@@ -64,12 +60,31 @@ public class Picto extends Img { ...@@ -64,12 +60,31 @@ public class Picto extends Img {
private String translation; private String translation;
private boolean is_mirror=false; private boolean is_mirror=false;
private boolean highlight_background=false; private boolean highlight_background=false;
ValueAnimator.AnimatorListener lighten=null;
public boolean is_mirror() {return is_mirror;} public boolean is_mirror() {return is_mirror;}
public ValueAnimator.AnimatorListener lighten() {
return lighten;
}
public boolean is_highlight_background() {return highlight_background;} public boolean is_highlight_background() {return highlight_background;}
public void set_mirror(boolean is_mirror, boolean highlight_background) { public void set_mirror(boolean is_mirror, boolean highlight_background) {
this.highlight_background =highlight_background; this.highlight_background =highlight_background;
this.is_mirror=is_mirror;} this.is_mirror=is_mirror;}
public void set_ligthen(ValueAnimator.AnimatorListener lighten) {
this.lighten = lighten;
}
public Picto(Picto p) {
super(p);
try {
this.attributes=new JSONObject(p.attributes.toString());
} catch (JSONException e) {
Log.e(this.getClass().getCanonicalName(),e.getMessage());
}
translation=new String(p.get_translation());
}
public Picto(int id, String url, String translation, int cat, int row, int column, int freeRow, int freeColumn) throws JSONException { public Picto(int id, String url, String translation, int cat, int row, int column, int freeRow, int freeColumn) throws JSONException {
this(id, url, translation, new JSONObject() this(id, url, translation, new JSONObject()
.put(JSON_ATTTRS.CATEGORY, cat) .put(JSON_ATTTRS.CATEGORY, cat)
......
...@@ -8,8 +8,8 @@ import android.util.Log; ...@@ -8,8 +8,8 @@ import android.util.Log;
import com.yottacode.net.RestapiWrapper; import com.yottacode.net.RestapiWrapper;
import com.yottacode.net.iRestapiListener; import com.yottacode.net.iRestapiListener;
import com.yottacode.pictogram.R; import com.yottacode.pictogram.R;
import com.yottacode.pictogram.net.ImgDownloader;
import com.yottacode.pictogram.net.ServerLogin; import com.yottacode.pictogram.net.ServerLogin;
import com.yottacode.pictogram.net.iImgDownloaderListener;
import com.yottacode.pictogram.tools.Img; import com.yottacode.pictogram.tools.Img;
import com.yottacode.pictogram.tools.PCBcontext; import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.GUITools; import com.yottacode.tools.GUITools;
...@@ -229,7 +229,7 @@ public class UserLogin { ...@@ -229,7 +229,7 @@ public class UserLogin {
public void set_student_oline(final User student, String token, final Intent pictogramActivity, final Activity activity) { public void set_student_oline(final User student, String token, final Intent pictogramActivity, final Activity activity) {
final ProgressDialog progressDialog=ProgressDialog.show(activity, activity.getString(R.string.userLoadingTxt),activity. getString(R.string.loadingGrammar)); final ProgressDialog progressDialog=ProgressDialog.show(activity, activity.getString(R.string.userLoadingTxt),activity. getString(R.string.loadingGrammar));
PCBcontext.set_user(student, token, new iImgDownloaderListener() { PCBcontext.set_user(student, token, new ImgDownloader.iImgDownloaderListener() {
@Override @Override
public void loadComplete() { public void loadComplete() {
PCBcontext.getDevice().insertUser(student); PCBcontext.getDevice().insertUser(student);
......
...@@ -9,12 +9,9 @@ import com.yottacode.pictogram.action.VocabularyAction; ...@@ -9,12 +9,9 @@ import com.yottacode.pictogram.action.VocabularyAction;
import com.yottacode.pictogram.dao.Picto; import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.net.ImgDownloader; import com.yottacode.pictogram.net.ImgDownloader;
import com.yottacode.pictogram.net.PictoUploader; import com.yottacode.pictogram.net.PictoUploader;
import com.yottacode.pictogram.net.iImgDownloaderListener;
import com.yottacode.pictogram.net.websockets.ActionTalk; import com.yottacode.pictogram.net.websockets.ActionTalk;
import com.yottacode.pictogram.net.websockets.Room; import com.yottacode.pictogram.net.websockets.Room;
import com.yottacode.pictogram.net.websockets.VocabularyTalk; import com.yottacode.pictogram.net.websockets.VocabularyTalk;
import com.yottacode.pictogram.net.websockets.iActionListener;
import com.yottacode.pictogram.net.websockets.iVocabularyListener;
import com.yottacode.pictogram.tools.Img; import com.yottacode.pictogram.tools.Img;
import com.yottacode.pictogram.tools.PCBcontext; import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.GUITools; import com.yottacode.tools.GUITools;
...@@ -41,14 +38,15 @@ public class Vocabulary implements Iterable<Picto> { ...@@ -41,14 +38,15 @@ public class Vocabulary implements Iterable<Picto> {
Hashtable<Integer,LinkedList<Picto>> pictos; Hashtable<Integer,LinkedList<Picto>> pictos;
static int DEFAULT_VOCABULARY_SIZE=200; static int DEFAULT_VOCABULARY_SIZE=200;
iImgDownloaderListener imgListener; ImgDownloader.iImgDownloaderListener imgListener;
private ActionTalk actionTalk;
/** /**
* Creates a new vocabulary and download/load the vocabulary and the corresponding pictos * Creates a new vocabulary and download/load the vocabulary and the corresponding pictos
* @param listener * @param listener
*/ */
public Vocabulary(iImgDownloaderListener listener) { public Vocabulary(ImgDownloader.iImgDownloaderListener listener) {
this.pictos = new Hashtable<>(Vocabulary.DEFAULT_VOCABULARY_SIZE); this.pictos = new Hashtable<>(Vocabulary.DEFAULT_VOCABULARY_SIZE);
this.imgListener=listener; this.imgListener=listener;
if (PCBcontext.getNetService().online()) { if (PCBcontext.getNetService().online()) {
...@@ -64,8 +62,8 @@ public class Vocabulary implements Iterable<Picto> { ...@@ -64,8 +62,8 @@ public class Vocabulary implements Iterable<Picto> {
} }
} }
public void listen(Room room, iVocabularyListener listener, iActionListener action_listener) { public void listen(Room room, VocabularyTalk.iVocabularyListener listener, ActionTalk.iActionListener action_listener) {
iVocabularyListener vocabulary_listeners[] = {new iVocabularyListener() { VocabularyTalk.iVocabularyListener vocabulary_listeners[] = {new VocabularyTalk.iVocabularyListener() {
@Override @Override
public void change(action action, int picto_cat, int picto_id, JSONObject args) { public void change(action action, int picto_cat, int picto_id, JSONObject args) {
switch (action) { switch (action) {
...@@ -103,10 +101,16 @@ public class Vocabulary implements Iterable<Picto> { ...@@ -103,10 +101,16 @@ public class Vocabulary implements Iterable<Picto> {
} }
},listener}; },listener};
new VocabularyTalk(room, vocabulary_listeners); new VocabularyTalk(room, vocabulary_listeners);
new ActionTalk(room, new iActionListener[] {action_listener}); addActionTalkListener(action_listener);
} }
public void addActionTalkListener(ActionTalk.iActionListener listener) {
if (actionTalk==null) actionTalk=new ActionTalk(PCBcontext.getRoom(), listener);
else actionTalk.addListener(listener);
}
public void removeActionTalkListener(ActionTalk.iActionListener listener) {
actionTalk.removeListener(listener);
}
/** /**
* UPload local status modifications and new pictos. Note that when * UPload local status modifications and new pictos. Note that when
* a picto is uploaded is not required to delete from the local PCB * a picto is uploaded is not required to delete from the local PCB
...@@ -247,7 +251,7 @@ public class Vocabulary implements Iterable<Picto> { ...@@ -247,7 +251,7 @@ public class Vocabulary implements Iterable<Picto> {
public void addPicto(Picto pic, ImgDownloader.tsource source){ public void addPicto(Picto pic, ImgDownloader.tsource source){
addPicto(pic, source, this.imgListener); addPicto(pic, source, this.imgListener);
} }
public void addPicto(Picto pic, ImgDownloader.tsource source, iImgDownloaderListener imgListener){ public void addPicto(Picto pic, ImgDownloader.tsource source, ImgDownloader.iImgDownloaderListener imgListener){
Vector<Img> imgs=new Vector<Img>(1); Vector<Img> imgs=new Vector<Img>(1);
imgs.add(new Img(pic.get_id(), pic.get_url(), Img.VOCABULARY)); imgs.add(new Img(pic.get_id(), pic.get_url(), Img.VOCABULARY));
...@@ -259,7 +263,7 @@ public class Vocabulary implements Iterable<Picto> { ...@@ -259,7 +263,7 @@ public class Vocabulary implements Iterable<Picto> {
PCBcontext.getPcbdb().addPicto(pic); PCBcontext.getPcbdb().addPicto(pic);
} }
public void setImgDownloaderListener(iImgDownloaderListener listener) { public void setImgDownloaderListener(ImgDownloader.iImgDownloaderListener listener) {
this.imgListener=listener; this.imgListener=listener;
} }
...@@ -383,7 +387,7 @@ public class Vocabulary implements Iterable<Picto> { ...@@ -383,7 +387,7 @@ public class Vocabulary implements Iterable<Picto> {
final Picto picto[]=new Picto[1]; final Picto picto[]=new Picto[1];
try { try {
picto[0] = new Picto(id, url, exp, cat, coord_x, coord_y, free_category_coord_x, free_category_coord_y); picto[0] = new Picto(id, url, exp, cat, coord_x, coord_y, free_category_coord_x, free_category_coord_y);
addPicto(picto[0], ImgDownloader.tsource.local, new iImgDownloaderListener() { addPicto(picto[0], ImgDownloader.tsource.local, new ImgDownloader.iImgDownloaderListener() {
@Override @Override
public void loadComplete() { public void loadComplete() {
listener.saved(picto[0]); listener.saved(picto[0]);
......
...@@ -8,7 +8,6 @@ import android.util.Log; ...@@ -8,7 +8,6 @@ import android.util.Log;
import com.yottacode.pictogram.R; import com.yottacode.pictogram.R;
import com.yottacode.pictogram.tools.Img; import com.yottacode.pictogram.tools.Img;
import com.yottacode.pictogram.tools.PCBcontext;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
...@@ -64,7 +63,7 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> { ...@@ -64,7 +63,7 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> {
int seconds = Calendar.getInstance().get(Calendar.SECOND); int seconds = Calendar.getInstance().get(Calendar.SECOND);
try { try {
;
for (Img img: imgs) { for (Img img: imgs) {
if (!img.exists_bitmap(this.context) || this.force_download || this.source==source.local) try { if (!img.exists_bitmap(this.context) || this.force_download || this.source==source.local) try {
this.activityManager.getMemoryInfo(mi); this.activityManager.getMemoryInfo(mi);
...@@ -79,6 +78,7 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> { ...@@ -79,6 +78,7 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> {
} }
int size=img.save_bitmap(this.context, is); int size=img.save_bitmap(this.context, is);
allsize+=size; allsize+=size;
if (is != null) is.close();
i++; i++;
} catch (IOException e) { } catch (IOException e) {
j++; j++;
...@@ -117,4 +117,13 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> { ...@@ -117,4 +117,13 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> {
else imgListener.loadImg(img); else imgListener.loadImg(img);
} }
/**
* Created by emblanco on 24/09/15.
* MOdified by dofer on 27/06/16.
*/
public static interface iImgDownloaderListener {
public void loadComplete(); // for loading the vocabulary
public void loadImg(Img image); // for loading one image
public void error(Exception err); //error happens
}
} }
...@@ -162,4 +162,17 @@ public class NetService implements Runnable { ...@@ -162,4 +162,17 @@ public class NetService implements Runnable {
public iNetServiceDevice getNetServiceDevice() { public iNetServiceDevice getNetServiceDevice() {
return this.device; return this.device;
} }
/**
* Created by Fernando on 12/08/2016.
*/
public static interface iNetServiceDevice {
public void build();
public void notifyStatus(boolean updated);
public void closeNotifyStatus();
public void restart_app(boolean direct_login);
public void restart_app(Intent intent, boolean direct_login);
public void updateUserConfig(User user);
}
} }
...@@ -2,9 +2,7 @@ package com.yottacode.pictogram.net; ...@@ -2,9 +2,7 @@ package com.yottacode.pictogram.net;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log; import android.util.Log;
import android.widget.Toast;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.koushikdutta.ion.Ion; import com.koushikdutta.ion.Ion;
...@@ -15,7 +13,6 @@ import com.yottacode.pictogram.action.VocabularyAction; ...@@ -15,7 +13,6 @@ import com.yottacode.pictogram.action.VocabularyAction;
import com.yottacode.pictogram.dao.Picto; import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.tools.Img; import com.yottacode.pictogram.tools.Img;
import com.yottacode.pictogram.tools.PCBcontext; import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.BitmapTools;
import com.yottacode.tools.GUITools; import com.yottacode.tools.GUITools;
import org.json.JSONArray; import org.json.JSONArray;
...@@ -258,4 +255,10 @@ public class PictoUploader { ...@@ -258,4 +255,10 @@ public class PictoUploader {
} }
/**
* Created by Fernando on 28/07/2016.
*/
public static interface iPictoUploaderListener {
void success(boolean success);
}
} }
package com.yottacode.pictogram.net;
import com.yottacode.net.iRestapiListener;
import com.yottacode.pictogram.tools.PCBcontext;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Created by Fernando on 16/12/2016.
*/
public class SessionWrapper {
public interface iSessionWrapper {
void methods(JSONArray methods);
void error(String error);
}
iSessionWrapper listener;
public SessionWrapper(iSessionWrapper listener) {
this.listener=listener;
}
public void getMethods() {
int id=PCBcontext.getPcbdb().getCurrentUser().get_id_stu();
PCBcontext.getRestapiWrapper().ask("/stu/" + id+"/methods",null,"get",true, new iRestapiListener() {
@Override
public void preExecute() {
}
@Override
public void result(JSONArray result) {
listener.methods(result);
}
@Override
public void result(JSONObject result) {
try {
listener.methods(new JSONArray(1).put(result));
} catch (JSONException e) {
listener.error(e.getMessage());
}
}
@Override
public void error(Exception e) {
listener.error(e.getMessage());
}
});
}
}
package com.yottacode.pictogram.net;
import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.tools.Img;
import java.util.LinkedList;
/**
* Created by emblanco on 24/09/15.
* MOdified by dofer on 27/06/16.
*/
public interface iImgDownloaderListener {
public void loadComplete(); // for loading the vocabulary
public void loadImg(Img image); // for loading one image
public void error(Exception err); //error happens
}
package com.yottacode.pictogram.net;
import android.content.Intent;
import com.yottacode.pictogram.dao.User;
/**
* Created by Fernando on 12/08/2016.
*/
public interface iNetServiceDevice {
public void build();
public void notifyStatus(boolean updated);
public void closeNotifyStatus();
public void restart_app(boolean direct_login);
public void restart_app(Intent intent, boolean direct_login);
public void updateUserConfig(User user);
}
package com.yottacode.pictogram.net;
/**
* Created by Fernando on 28/07/2016.
*/
public interface iPictoUploaderListener {
void success(boolean success);
}
...@@ -9,6 +9,9 @@ import com.yottacode.pictogram.tools.PCBcontext; ...@@ -9,6 +9,9 @@ import com.yottacode.pictogram.tools.PCBcontext;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.Iterator;
import java.util.Vector;
/** /**
* Websocket Vocabulary Room based on Room * Websocket Vocabulary Room based on Room
* @author Fernando Martinez Santiago * @author Fernando Martinez Santiago
...@@ -19,12 +22,13 @@ public class ActionTalk implements Emitter.Listener { ...@@ -19,12 +22,13 @@ public class ActionTalk implements Emitter.Listener {
private static final String URL ="action"; private static final String URL ="action";
private Room room; private Room room;
iActionListener listeners[]; Vector<iActionListener> listeners;
public ActionTalk(Room room, iActionListener listeners[]) { public ActionTalk(Room room, iActionListener listener) {
this.room = room; this.room = room;
this.room.listen(URL, this); this.room.listen(URL, this);
this.listeners=listeners; this.listeners=new Vector<>(2);
listeners.add(listener);
} }
@Override @Override
...@@ -62,4 +66,24 @@ public class ActionTalk implements Emitter.Listener { ...@@ -62,4 +66,24 @@ public class ActionTalk implements Emitter.Listener {
} }
} }
public void addListener(iActionListener listener) {
listeners.add(listener);
}
public void removeListener(iActionListener removedlistener) {
Iterator listeners=this.listeners.iterator();
while (listeners.hasNext() )
if (listeners.next()==removedlistener) listeners.remove();
}
/**
* Vocabulary Listener
* @author Fernando Martinez Santiago
* @version 1.0
*/
public interface iActionListener {
enum action {add,select}
void action(action action, int picto_cat, int picto_id);
}
} }
...@@ -57,4 +57,13 @@ public class StudentTalk implements Emitter.Listener { ...@@ -57,4 +57,13 @@ public class StudentTalk implements Emitter.Listener {
} }
} }
/**
* Vocabulary Listener
* @author Fernando Martinez Santiago
* @version 1.0
*/
public static interface iStudentListener {
public void change(User updatedStudent);
}
} }
...@@ -61,4 +61,14 @@ public class VocabularyTalk implements Emitter.Listener { ...@@ -61,4 +61,14 @@ public class VocabularyTalk implements Emitter.Listener {
} }
} }
/**
* Vocabulary Listener
* @author Fernando Martinez Santiago
* @version 1.0
*/
public static interface iVocabularyListener {
public enum action {delete,add,update}
public void change(action action, int picto_cat, int picto_id, JSONObject args);
}
} }
package com.yottacode.pictogram.net.websockets;
/**
* Vocabulary Listener
* @author Fernando Martinez Santiago
* @version 1.0
*/
public interface iActionListener {
public enum action {add,select}
public void action(iActionListener.action action, int picto_cat, int picto_id);
}
package com.yottacode.pictogram.net.websockets;
import com.yottacode.pictogram.dao.User;
/**
* Vocabulary Listener
* @author Fernando Martinez Santiago
* @version 1.0
*/
public interface iStudentListener {
public void change(User updatedStudent);
}
package com.yottacode.pictogram.net.websockets;
import org.json.JSONObject;
/**
* Vocabulary Listener
* @author Fernando Martinez Santiago
* @version 1.0
*/
public interface iVocabularyListener {
public enum action {delete,add,update}
public void change(iVocabularyListener.action action, int picto_cat, int picto_id, JSONObject args);
}
...@@ -57,6 +57,18 @@ public class Img { ...@@ -57,6 +57,18 @@ public class Img {
this.type=type; this.type=type;
this.bitmap=null; this.bitmap=null;
} }
public Img(Img i) {
this.id = i.id;
this.url = new String(i.url);
this.type=new String(i.type);
try {
if (PCBcontext.getContext()!=null && i.get_bitmap(PCBcontext.getContext())!=null)
this.bitmap=i.get_bitmap(PCBcontext.getContext()).copy(i.get_bitmap(PCBcontext.getContext()).getConfig(),true);
} catch (IOException e) {
Log.e(this.getClass().getCanonicalName(),e.getMessage());
}
}
public String file_name() { return this.id+"."+Img.FILETYPE; } public String file_name() { return this.id+"."+Img.FILETYPE; }
public int get_id() { return this.id;} public int get_id() { return this.id;}
......
...@@ -11,12 +11,10 @@ import com.yottacode.pictogram.dao.Device; ...@@ -11,12 +11,10 @@ import com.yottacode.pictogram.dao.Device;
import com.yottacode.pictogram.dao.PCBDBHelper; import com.yottacode.pictogram.dao.PCBDBHelper;
import com.yottacode.pictogram.dao.User; import com.yottacode.pictogram.dao.User;
import com.yottacode.pictogram.grammar.Vocabulary; import com.yottacode.pictogram.grammar.Vocabulary;
import com.yottacode.pictogram.net.ImgDownloader;
import com.yottacode.pictogram.net.NetService; import com.yottacode.pictogram.net.NetService;
import com.yottacode.pictogram.net.iImgDownloaderListener;
import com.yottacode.pictogram.net.iNetServiceDevice;
import com.yottacode.pictogram.net.websockets.Room; import com.yottacode.pictogram.net.websockets.Room;
import com.yottacode.pictogram.net.websockets.StudentTalk; import com.yottacode.pictogram.net.websockets.StudentTalk;
import com.yottacode.pictogram.net.websockets.iStudentListener;
public final class PCBcontext { public final class PCBcontext {
private static Context context; private static Context context;
...@@ -35,7 +33,7 @@ public final class PCBcontext { ...@@ -35,7 +33,7 @@ public final class PCBcontext {
* Init method for passing params to the singleton * Init method for passing params to the singleton
* @param c @TODO application or activity context? * @param c @TODO application or activity context?
*/ */
public static void init(Context c, iNetServiceDevice listener){ public static void init(Context c, NetService.iNetServiceDevice listener){
if (!init) { if (!init) {
init = true; init = true;
context = c; context = c;
...@@ -56,7 +54,7 @@ public final class PCBcontext { ...@@ -56,7 +54,7 @@ public final class PCBcontext {
* @param student * @param student
* @param listener * @param listener
*/ */
public static void set_user(User student, String token, iImgDownloaderListener listener) { public static void set_user(User student, String token, ImgDownloader.iImgDownloaderListener listener) {
if (!init) { if (!init) {
Log.i(PCBcontext.class.getCanonicalName(), "PCBcontext.init must be called once previously "); Log.i(PCBcontext.class.getCanonicalName(), "PCBcontext.init must be called once previously ");
throw new java.lang.AssertionError("init must be called once previously "); throw new java.lang.AssertionError("init must be called once previously ");
...@@ -70,7 +68,7 @@ public final class PCBcontext { ...@@ -70,7 +68,7 @@ public final class PCBcontext {
actionLog = new ActionLog(); actionLog = new ActionLog();
vocabulary = new Vocabulary(listener); vocabulary = new Vocabulary(listener);
getNetService().notifyStatus(); getNetService().notifyStatus();
if (getNetService().online()) new StudentTalk(room, new iStudentListener[] {new iStudentListener() { if (getNetService().online()) new StudentTalk(room, new StudentTalk.iStudentListener[] {new StudentTalk.iStudentListener() {
@Override @Override
public void change(User updatedStudent) { public void change(User updatedStudent) {
PCBcontext.getDevice().insertUser(updatedStudent); PCBcontext.getDevice().insertUser(updatedStudent);
......
...@@ -69,5 +69,6 @@ ...@@ -69,5 +69,6 @@
<string name="default_tts_voice_male">es-es-x-ana#male_1-local</string> <string name="default_tts_voice_male">es-es-x-ana#male_1-local</string>
<string name="default_tts_voice_female">es-es-x-ana#female_2-local</string> <string name="default_tts_voice_female">es-es-x-ana#female_2-local</string>
</resources> </resources>
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<item name="red" type="color">#FFFF4444</item> <item name="red" type="color">#FFFF4444</item>
<item name="darkblue" type="color">#FF0099CC</item> <item name="darkblue" type="color">#FF0099CC</item>
<item name="darkpurple" type="color">#FF9933CC</item> <item name="darkpurple" type="color">#FF9933CC</item>
<item name="darkgreen" type="color">#FF669900</item> <item name="darkgreen" type="color">#669900</item>
<item name="darkorange" type="color">#FFFF8800</item> <item name="darkorange" type="color">#FFFF8800</item>
<item name="darkred" type="color">#cc0000</item> <item name="darkred" type="color">#cc0000</item>
......
...@@ -54,6 +54,12 @@ ...@@ -54,6 +54,12 @@
android:label="@string/app_name" android:label="@string/app_name"
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="landscape" /> android:screenOrientation="landscape" />
<activity
android:name="com.yottacode.pictogram.tabletlibrary.gui.session.SessionActivity"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="landscape" />
</application> </application>
</manifest> </manifest>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".gui.Supervisor_SerialActivity">
<EditText
android:id="@+id/serialmail"
android:layout_width="400px"
android:layout_height="wrap_content"
android:hint="@string/prompt_serial_mail"
android:imeActionId="@+id/login"
android:imeOptions="actionUnspecified"
android:inputType="text"
android:maxLines="1"
android:singleLine="true"
android:layout_alignParentTop="true" />
<EditText
android:id="@+id/serialpass"
android:layout_width="400px"
android:layout_height="wrap_content"
android:hint="@string/prompt_serial_pass"
android:imeActionId="@+id/login"
android:imeActionLabel="@string/action_entrar"
android:imeOptions="actionUnspecified"
android:inputType="textPassword"
android:maxLines="1"
android:singleLine="true"
android:layout_below="@+id/serialmail"
/>
<Button
android:id="@+id/entrar_button" style="?android:textAppearanceSmall"
android:layout_width="400px"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/action_entrar"
android:textStyle="bold"
android:layout_below="@+id/serialpass"/>
<ImageView
android:layout_width="200px"
android:layout_height="120px"
android:layout_marginLeft="30px"
android:orientation="horizontal"
android:src="@drawable/pictogram_logo"
android:id="@+id/imageView"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/serialmail"
/>
<TextView
android:text="SUPERVISOR"
android:textStyle="bold"
android:textColor="@color/green"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/text_supervisor"
android:layout_below="@+id/imageView"
android:layout_toEndOf="@+id/serialmail"
android:layout_marginLeft="60px"
/>
</RelativeLayout>
...@@ -43,6 +43,13 @@ ...@@ -43,6 +43,13 @@
<sourceFolder url="file://$MODULE_DIR$/src/CIFlavorDebug/jni" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/CIFlavorDebug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/CIFlavorDebug/rs" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/CIFlavorDebug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/CIFlavorDebug/shaders" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/CIFlavorDebug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/CIFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/CIFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/CIFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/CIFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/CIFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/CIFlavor/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/CIFlavor/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testCIFlavorDebug/res" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/testCIFlavorDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testCIFlavorDebug/resources" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/testCIFlavorDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testCIFlavorDebug/assets" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/testCIFlavorDebug/assets" type="java-test-resource" />
...@@ -51,13 +58,6 @@ ...@@ -51,13 +58,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/testCIFlavorDebug/jni" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/testCIFlavorDebug/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testCIFlavorDebug/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/testCIFlavorDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testCIFlavorDebug/shaders" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/testCIFlavorDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/CIFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/CIFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/CIFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/CIFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/CIFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/CIFlavor/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/CIFlavor/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/CIFlavor/res" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/CIFlavor/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/CIFlavor/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/CIFlavor/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/CIFlavor/assets" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/CIFlavor/assets" type="java-resource" />
...@@ -124,6 +124,7 @@ ...@@ -124,6 +124,7 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/24.2.1/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/24.2.1/jars" />
...@@ -136,11 +137,17 @@ ...@@ -136,11 +137,17 @@
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/24.2.1/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/24.2.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/24.2.1/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/24.2.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
......
...@@ -8,7 +8,7 @@ android { ...@@ -8,7 +8,7 @@ android {
targetSdkVersion 22 targetSdkVersion 22
versionCode 1 versionCode 1
versionName "1.0" versionName "1.0"
resValue "string","SerialClass","com.yottacode.pictogram.tabletlibrary.gui.SerialActivity" resValue "string", "SerialClass", "com.yottacode.pictogram.tabletlibrary.gui.SerialActivity"
resValue "integer", "rows", "5" resValue "integer", "rows", "5"
resValue "integer", "columns", "10" resValue "integer", "columns", "10"
resValue "integer", "rows_big", "4" resValue "integer", "rows_big", "4"
...@@ -27,8 +27,8 @@ android { ...@@ -27,8 +27,8 @@ android {
} }
dependencies { dependencies {
compile 'com.android.support:appcompat-v7:24.+'
compile 'com.android.support:support-v4:24.1.1'
compile fileTree(include: ['*.jar'], dir: 'libs') compile fileTree(include: ['*.jar'], dir: 'libs')
compile project(':commonlibrary') compile project(':commonlibrary')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
} }
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yottacode.pictogram.tabletlibrary"> package="com.yottacode.pictogram.tabletlibrary">
<application android:allowBackup="true" android:label="@string/app_name" <application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true"> android:supportsRtl="true">
</application> </application>
......
...@@ -14,7 +14,6 @@ import android.widget.ImageView; ...@@ -14,7 +14,6 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.yottacode.pictogram.net.ImgDownloader; import com.yottacode.pictogram.net.ImgDownloader;
import com.yottacode.pictogram.net.iImgDownloaderListener;
import com.yottacode.pictogram.tabletlibrary.R; import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tools.Img; import com.yottacode.pictogram.tools.Img;
import com.yottacode.pictogram.tools.PCBcontext; import com.yottacode.pictogram.tools.PCBcontext;
...@@ -86,7 +85,7 @@ public class LoginActivity extends FragmentActivity { ...@@ -86,7 +85,7 @@ public class LoginActivity extends FragmentActivity {
this.getIntent().getStringExtra("pic"), this.getIntent().getStringExtra("pic"),
Img.SUPERVISOR Img.SUPERVISOR
)); ));
ImgDownloader downloader = new ImgDownloader(this, new iImgDownloaderListener() { ImgDownloader downloader = new ImgDownloader(this, new ImgDownloader.iImgDownloaderListener() {
@Override @Override
public void loadComplete() { public void loadComplete() {
try { try {
......
package com.yottacode.pictogram.tabletlibrary.gui; package com.yottacode.pictogram.tabletlibrary.gui;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint; import android.graphics.Paint;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.util.Log; import android.support.v4.content.ContextCompat;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.Gravity; import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
...@@ -32,6 +34,7 @@ public class PictoItemViewGenerator { ...@@ -32,6 +34,7 @@ public class PictoItemViewGenerator {
public static final int LAYOUT_BIG = R.layout.picto_grid_item_big; public static final int LAYOUT_BIG = R.layout.picto_grid_item_big;
public static int mirror_color=0; public static int mirror_color=0;
/** /**
* *
* @param picto Pictogram to set the legend text * @param picto Pictogram to set the legend text
...@@ -162,7 +165,8 @@ public class PictoItemViewGenerator { ...@@ -162,7 +165,8 @@ public class PictoItemViewGenerator {
if (convertView == null) { if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(PCBcontext.getPcbdb().getCurrentUser().is_picto_size_big() ? LAYOUT_BIG : LAYOUT, parent, false); convertView = LayoutInflater.from(parent.getContext()).inflate(PCBcontext.getPcbdb().getCurrentUser().is_picto_size_big() ? LAYOUT_BIG : LAYOUT, parent, false);
} }
if (parent.getId()==R.id.tape_grid_view)
convertView.setPadding(0,0,0,0);
RelativeLayout layoutWrapper ; RelativeLayout layoutWrapper ;
FrameLayout layout ; FrameLayout layout ;
final ImageView pictoImage ; final ImageView pictoImage ;
...@@ -236,6 +240,7 @@ public class PictoItemViewGenerator { ...@@ -236,6 +240,7 @@ public class PictoItemViewGenerator {
pictoImage.setScaleY(scale[mirror_color%scale.length]); pictoImage.setScaleY(scale[mirror_color%scale.length]);
if (picto.is_highlight_background()) layout.setBackgroundColor(color[mirror_color%color.length]); if (picto.is_highlight_background()) layout.setBackgroundColor(color[mirror_color%color.length]);
} }
} }
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
...@@ -244,4 +249,6 @@ public class PictoItemViewGenerator { ...@@ -244,4 +249,6 @@ public class PictoItemViewGenerator {
return convertView; return convertView;
} }
} }
...@@ -21,7 +21,6 @@ import com.yottacode.pictogram.dao.User; ...@@ -21,7 +21,6 @@ import com.yottacode.pictogram.dao.User;
import com.yottacode.pictogram.dao.UserLogin; import com.yottacode.pictogram.dao.UserLogin;
import com.yottacode.pictogram.tabletlibrary.R; import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.net.NetServiceTablet; import com.yottacode.pictogram.tabletlibrary.net.NetServiceTablet;
import com.yottacode.pictogram.tools.Img;
import com.yottacode.pictogram.tools.PCBcontext; import com.yottacode.pictogram.tools.PCBcontext;
import org.json.JSONException; import org.json.JSONException;
......
...@@ -17,7 +17,6 @@ import com.yottacode.net.RestapiWrapper; ...@@ -17,7 +17,6 @@ import com.yottacode.net.RestapiWrapper;
import com.yottacode.net.iRestapiListener; import com.yottacode.net.iRestapiListener;
import com.yottacode.pictogram.dao.User; import com.yottacode.pictogram.dao.User;
import com.yottacode.pictogram.net.ImgDownloader; import com.yottacode.pictogram.net.ImgDownloader;
import com.yottacode.pictogram.net.iImgDownloaderListener;
import com.yottacode.pictogram.tabletlibrary.R; import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tools.Img; import com.yottacode.pictogram.tools.Img;
import com.yottacode.pictogram.tools.PCBcontext; import com.yottacode.pictogram.tools.PCBcontext;
...@@ -113,7 +112,7 @@ public class StudentFragmentGrid extends Fragment{ ...@@ -113,7 +112,7 @@ public class StudentFragmentGrid extends Fragment{
Log.i(this.getClass().getCanonicalName(),"Loading vocabulary for "+new_user.get_name_stu()); Log.i(this.getClass().getCanonicalName(),"Loading vocabulary for "+new_user.get_name_stu());
progressDialog=ProgressDialog.show(getActivity(), getString(R.string.loadingGrammar), progressDialog=ProgressDialog.show(getActivity(), getString(R.string.loadingGrammar),
getString(R.string.userLoadingTxt), false, false); getString(R.string.userLoadingTxt), false, false);
PCBcontext.set_user(new_user, intent.getStringExtra("token"), new iImgDownloaderListener() { PCBcontext.set_user(new_user, intent.getStringExtra("token"), new ImgDownloader.iImgDownloaderListener() {
@Override @Override
public void loadComplete() { public void loadComplete() {
if (progressDialog!=null && progressDialog.isShowing()) progressDialog.dismiss(); if (progressDialog!=null && progressDialog.isShowing()) progressDialog.dismiss();
...@@ -163,7 +162,7 @@ public class StudentFragmentGrid extends Fragment{ ...@@ -163,7 +162,7 @@ public class StudentFragmentGrid extends Fragment{
} //for } //for
progressDialog= ProgressDialog.show(getActivity(), getString(R.string.imguserLoadingMsg), progressDialog= ProgressDialog.show(getActivity(), getString(R.string.imguserLoadingMsg),
getString(R.string.userLoadingTxt), false, false); getString(R.string.userLoadingTxt), false, false);
ImgDownloader downloader = new ImgDownloader(getActivity(), new iImgDownloaderListener() { ImgDownloader downloader = new ImgDownloader(getActivity(), new ImgDownloader.iImgDownloaderListener() {
private void loaded() { private void loaded() {
if (progressDialog!=null && progressDialog.isShowing()) progressDialog.dismiss(); if (progressDialog!=null && progressDialog.isShowing()) progressDialog.dismiss();
......
...@@ -52,6 +52,7 @@ public class TapeAdapter extends BaseAdapter { ...@@ -52,6 +52,7 @@ public class TapeAdapter extends BaseAdapter {
pictoLinkedList.remove(position); pictoLinkedList.remove(position);
} }
// ELIMINAR el último ITEM DEL ADAPTADOR // ELIMINAR el último ITEM DEL ADAPTADOR
public void deleteLastView(){ public void deleteLastView(){
// Controlar excepcion al intentar eliminar el último cuando no hay elementos // Controlar excepcion al intentar eliminar el último cuando no hay elementos
...@@ -96,10 +97,11 @@ public class TapeAdapter extends BaseAdapter { ...@@ -96,10 +97,11 @@ public class TapeAdapter extends BaseAdapter {
@Override @Override
public View getView(int position, View convertView, ViewGroup parent){ public View getView(int position, View convertView, ViewGroup parent){
return PictoItemViewGenerator.getPictoView( View pictoView = PictoItemViewGenerator.getPictoView(
this.pictoLinkedList.get(position), this.pictoLinkedList.get(position),
convertView, convertView,
parent,true); parent, true);
return pictoView;
} }
@TargetApi(Build.VERSION_CODES.LOLLIPOP) @TargetApi(Build.VERSION_CODES.LOLLIPOP)
......
package com.yottacode.pictogram.tabletlibrary.gui.session;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.yottacode.pictogram.net.SessionWrapper;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.GUITools;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* StudentFragmentGrid implements the gridview with the students
*
* @author Fernando
* @version 1.1
*/
public class ListInstructionsFragment extends Fragment{
interface iListInstructionsFragment {
void instruction_selected(int instruction, String instruction_name);
void method_selected(int method, String method_name);
}
ProgressDialog progressDialog;
JSONArray methods=null;
private final String LOG_TAG = this.getClass().getSimpleName(); // Or .getCanonicalName()
ListView listview_methods;
ListView listview_instructions;
int methodPosition;
int instructionPosition;
iListInstructionsFragment listener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onStart() {
super.onStart();
}
public void initAdapters() {
ArrayAdapter<String> adapter = (ArrayAdapter<String>) ListInstructionsFragment.this.listview_methods.getAdapter();
if (progressDialog != null && progressDialog.isShowing())
progressDialog.dismiss();
try {
for (int i = 0; i < methods.length(); i++)
adapter.add(methods.getJSONObject(i).getString("name"));
} catch (JSONException e) {
Log.e(this.getClass().getCanonicalName(), e.toString());
}
}
private void setMethods() {
if (this.methods == null || methods.length()==0) {
new SessionWrapper(new SessionWrapper.iSessionWrapper() {
@Override
public void methods(JSONArray methods) {
if (methods.length()==0) {
GUITools.show_alert(ListInstructionsFragment.this.getContext(), R.string.session_empty, getString(R.string.server), new GUITools.iOKListener() {
@Override
public void ok() {
ListInstructionsFragment.this.getActivity().finish();
}
});
}
ListInstructionsFragment.this.methods = methods;
initAdapters();
}
@Override
public void error(String error) {
if (progressDialog != null && progressDialog.isShowing())
progressDialog.dismiss();
GUITools.show_alert(PCBcontext.getContext(), R.string.session_error, error);
}
}).getMethods();
progressDialog = ProgressDialog.show(getActivity(), getString(R.string.session_instruction), getString(R.string.session_loading));
}
else
initAdapters();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_instructions_session, container, false);
initMethods(view);
initInstructions(view);
setMethods();
methodPosition=-1;
instructionPosition=-1;
return view;
}
private void initMethods(View view) {
this.listview_methods = (ListView) view.findViewById(R.id.methodsListView);
this.listview_methods.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
ListInstructionsFragment.this.methodPosition = pos;
ArrayAdapter<String> adapter = (ArrayAdapter<String>) listview_instructions.getAdapter();
adapter.clear();
try {
JSONArray instructions = methods.getJSONObject(pos).getJSONArray("instructions");
for (int i = 0; i < instructions.length(); i++) {
JSONObject instruction = instructions.getJSONObject(i);
adapter.add(instruction.getString("name"));
}
} catch (JSONException e) {
e.printStackTrace();
}
ListInstructionsFragment.this.instructionPosition = -1;
adapter.notifyDataSetChanged();
listener.method_selected(methodPosition,(String)listview_methods.getAdapter().getItem(methodPosition));
((ArrayAdapter<String>) listview_methods.getAdapter()).notifyDataSetChanged();
}
});
ArrayAdapter<String> adapter=new ArrayAdapter<String>(getActivity(),R.layout.list_sessions) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = super.getView(position, convertView, parent);
if (ListInstructionsFragment.this.methodPosition == position)
itemView.setBackgroundColor(Color.BLUE);
else
itemView.setBackgroundColor(Color.TRANSPARENT);
return itemView;
}
};
this.listview_methods.setAdapter(adapter);
}
private void initInstructions(View view) {
this.listview_instructions = (ListView) view.findViewById(R.id.instructionsListView);
this.listview_instructions.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
ListInstructionsFragment.this.instructionPosition = pos;
((ArrayAdapter<String>) listview_instructions.getAdapter()).notifyDataSetChanged();
listener.instruction_selected(instructionPosition,(String)listview_instructions.getAdapter().getItem(instructionPosition));
}
});
ArrayAdapter<String> adapter=new ArrayAdapter<String>(getActivity(),R.layout.list_sessions) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = super.getView(position, convertView, parent);
if (ListInstructionsFragment.this.instructionPosition== position)
itemView.setBackgroundColor(Color.BLUE);
else
itemView.setBackgroundColor(Color.TRANSPARENT);
return itemView;
}
};
this.listview_instructions.setAdapter(adapter);
}
@Override
public void onPause() {
super.onPause();
if ((progressDialog!= null) && progressDialog.isShowing())
progressDialog.dismiss();
progressDialog = null;
}
@SuppressWarnings("deprecation")
@Override
public void onAttach(Activity context) {
super.onAttach(context);
if (context instanceof iListInstructionsFragment) {
listener = (iListInstructionsFragment) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof iListInstructionsFragment) {
listener = (iListInstructionsFragment) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
listener = null;
}
}
package com.yottacode.pictogram.tabletlibrary.gui.session;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.tools.BitmapTools;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Vector;
/**
* Created by Fernando on 18/12/2016.
*/
class PictoAdapter extends BaseAdapter {
public void setCurrentMsg(int currentMsg) {
this.currentMsg = currentMsg;
}
public static class Item {
Bitmap img;
String secs;
public Item(Bitmap img, String secs) {
this.img=img;
this.secs=secs;
}
Bitmap getImg() {
return img;
}
String getTime() {
return secs;
}
public void setImg(Bitmap currmsg) {
this.img=currmsg;
}
}
Context context;
Vector<Item> msg;
int currentMsg=0;
final long base_time=new Date().getTime();
private static LayoutInflater inflater = null;
public PictoAdapter(Context context) {
this.context = context;
msg=new Vector<>(3);
newMsg();
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
private String getTimeDiff(long time) {
long mills = time - this.base_time;
int mins = (int) (mills / (1000*60));
int secs = (int)(mills/(1000)) - mins*60;
return "+"+mins+ "' " + secs+"''";
}
@Override
public int getCount() {
return msg.size();
}
@Override
public Item getItem(int position) {
return msg.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (vi == null)
vi = inflater.inflate(R.layout.session_picto_view, null);
ImageView picto=(ImageView)vi.findViewById(R.id.session_picto);
picto.setImageBitmap(this.msg.get(position).getImg());
if (currentMsg== position)
vi.setBackgroundColor(Color.LTGRAY);
else
vi.setBackgroundColor(Color.TRANSPARENT);
return vi;
}
public void addItem(Bitmap bmp) {
Item item=this.msg.get(currentMsg);
Bitmap oldmsg=item.getImg();
// bmp=new BitmapTools(bmp).resize(85,85).get();
bmp=set_text(context,bmp,getTimeDiff(new Date().getTime()));
Bitmap currmsg=combineImages(oldmsg,bmp);
item.setImg(currmsg);
}
public void newMsg() {
Bitmap bmp=BitmapFactory.decodeResource(context.getResources(),
R.drawable.application_online);
bmp=new BitmapTools(bmp).resize(75,75).get();
Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
calendar.setTime(new Date()); // assigns calendar to given date
String time= calendar.get(Calendar.HOUR)+":"+calendar.get(Calendar.MINUTE)+":"+calendar.get(Calendar.SECOND);
bmp=set_text(context,bmp,time);
if (this.currentMsg==this.msg.size()-1 || this.msg.size()==0) {
this.currentMsg = this.msg.size();
msg.add(new Item(bmp, time));
}
else {
this.currentMsg = this.msg.size() - 1;
notifyDataSetChanged();
}
}
private Bitmap combineImages(Bitmap c, Bitmap s) { // can add a 3rd parameter 'String loc' if you want to save the new image - left some code to do that at the bottom
Bitmap cs = null;
int width, height = 0;
if(c.getWidth() > s.getWidth()) {
width = c.getWidth() + s.getWidth();
height = c.getHeight();
} else {
width = s.getWidth() + s.getWidth();
height = c.getHeight();
}
cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas comboImage = new Canvas(cs);
comboImage.drawBitmap(c, 0f, 0f, null);
comboImage.drawBitmap(s, c.getWidth(), 0f, null);
return cs;
}
static Bitmap set_text(Context context,Bitmap bitmap,String texto) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
int width = bitmap.getWidth(); //Ancho original
int height = bitmap.getHeight(); //Alto original
android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig();
if (bitmapConfig == null) {
bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
}
bitmap = bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(bitmap);
Bitmap bm = Bitmap.createScaledBitmap(bitmap, (int)Math.round(0.9*width), (int)Math.round(0.9*height), false);
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); //Poner en blanco el bitmap original para dibujar encima
canvas.drawBitmap(bm, 0, 0, paint);
TextView textView = new TextView(context);
textView.layout(0, 50, 100, 100);
textView.setPadding(0, 0, 0, 0);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 13);
textView.setTextColor(Color.BLACK);
textView.setBackgroundColor(Color.TRANSPARENT);
textView.setWidth(100);
textView.setGravity(Gravity.CENTER_HORIZONTAL);
textView.setMaxLines(1);
textView.setText(texto);
textView.setDrawingCacheEnabled(true);
canvas.drawBitmap(textView.getDrawingCache(), 0, 60, null);
return bitmap;
}
}
package com.yottacode.pictogram.tabletlibrary.gui.session;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.ToggleButton;
import com.yottacode.pictogram.dao.User;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.gui.PictogramActivity;
import com.yottacode.pictogram.tools.PCBcontext;
import java.io.IOException;
public class SessionActivity extends FragmentActivity implements ListInstructionsFragment.iListInstructionsFragment, SessionFragment.OnSessionListener {
private static final String FRAGMENT_SESSION="session";
private static final String FRAGMENT_METHOD="method";
@Override
public void onSessionInteraction(Uri uri) {
}
class TouchButtonListener implements View.OnTouchListener {
int press,release;
public TouchButtonListener(int press,int release) {
this.press=press;
this.release=release;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
Drawable draw=event.getAction()==MotionEvent.ACTION_UP
? getDrawable(press)
: getDrawable(release);
v.setBackground(draw);
if (event.getAction()==MotionEvent.ACTION_UP) {
SessionFragment session = (SessionFragment) getSupportFragmentManager().findFragmentByTag(SessionActivity.FRAGMENT_SESSION);
//Bitmap bitmap=((BitmapDrawable)getDrawable(press)).getBitmap();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),press);
//Bitmap bm = Bitmap.createScaledBitmap(bitmap, (int)Math.round(0.9*bitmap.getWidth()), (int)Math.round(0.9*bitmap.getHeight()), false);
session.newMsg(bitmap);
}
return true;
}
}
float firstTouchX=-1;
SessionFragment sessionFragment = new SessionFragment();
ListInstructionsFragment listInstructionsFragment= new ListInstructionsFragment();
boolean previous_mirrormode=PCBcontext.getPcbdb().getCurrentUser().is_mirror_on();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_session);
User student=PCBcontext.getPcbdb().getCurrentUser();
final TextView StudentFullNameView = (TextView) findViewById(R.id.sessionTopbarStudentFullName);
final TextView StudentUserNameView = (TextView) findViewById(R.id.sessionTopbarStudentUserName);
final ImageView StudentPhotoView = (ImageView) findViewById(R.id.sessionTopbarStudentPhoto);
final ToggleButton onoffBtn=((ToggleButton)findViewById(R.id.sessionOnOffBtn));
final Button okBtn =((Button)findViewById(R.id.btn_correct));
final Button disBtn =((Button)findViewById(R.id.btn_discarded));
final Button spoBtn =((Button)findViewById(R.id.btn_spontaneous));
final Button failBtn =((Button)findViewById(R.id.btn_fail));
final Button supBtn =((Button)findViewById(R.id.btn_supervised));
StudentFullNameView.setText(student.get_name_stu() + " " + student.get_surname_stu());
StudentUserNameView.setText(student.get_nickname_stu());
try {
StudentPhotoView.setImageBitmap(student.get_bitmap_stu(this.getBaseContext()));
} catch (IOException e) {
Log.e(this.getClass().getCanonicalName(),e.getMessage());
}
okBtn.setOnTouchListener(new TouchButtonListener(R.drawable.session_ok,R.drawable.session_ok2));
disBtn.setOnTouchListener(new TouchButtonListener(R.drawable.session_fail,R.drawable.session_fail2));
spoBtn.setOnTouchListener(new TouchButtonListener(R.drawable.session_spontaneous,R.drawable.session_spontaneous2));
failBtn.setOnTouchListener(new TouchButtonListener(R.drawable.session_fail,R.drawable.session_fail2));
supBtn.setOnTouchListener(new TouchButtonListener(R.drawable.session_supervised,R.drawable.session_supervised2));
onoffBtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isChecked)
onoffBtn.setEnabled(false);
set_fragment(isChecked);
}
});
onoffBtn.setEnabled(false);
}
@Override
protected void onStart() {
super.onStart();
set_fragment(((ToggleButton)findViewById(R.id.sessionOnOffBtn)).isChecked());
}
@Override
public void instruction_selected(int instruction, String instruction_name) {
((TextView)findViewById(R.id.sessionTopbarInstructionName)).setText(instruction_name);
findViewById(R.id.sessionOnOffBtn).setEnabled(true);
}
@Override
public void method_selected(int method, String method_name) {
((ToggleButton)findViewById(R.id.sessionOnOffBtn)).setEnabled(false);
((TextView)findViewById(R.id.sessionTopbarMethodName)).setText(method_name);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (PCBcontext.getPcbdb().getCurrentUser().is_supervisor())
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
firstTouchX = event.getX();
break;
case MotionEvent.ACTION_MOVE:
if (event.getX()> firstTouchX +100) {
Intent pictogramActivity = new Intent(this, PictogramActivity.class);
startActivity(pictogramActivity);
}
break;
case MotionEvent.ACTION_UP:
firstTouchX = 100000;
}
return super.dispatchTouchEvent(event);
}
private void set_fragment(boolean isChecked) {
Fragment fragment;
String fragment_label;
final Button okBtn =((Button)findViewById(R.id.btn_correct));
final Button disBtn =((Button)findViewById(R.id.btn_discarded));
final Button spoBtn =((Button)findViewById(R.id.btn_spontaneous));
final Button failBtn =((Button)findViewById(R.id.btn_fail));
final Button supBtn =((Button)findViewById(R.id.btn_supervised));
int stop;
if (isChecked) {
fragment= sessionFragment;
fragment_label=SessionActivity.FRAGMENT_SESSION;
stop=View.VISIBLE;
if (!PCBcontext.getPcbdb().getCurrentUser().is_mirror_on())
PCBcontext.getPcbdb().getCurrentUser().alter_mirror_mode();
}
else {
fragment=listInstructionsFragment;
fragment_label=SessionActivity.FRAGMENT_METHOD;
stop=View.INVISIBLE;
if (previous_mirrormode!=PCBcontext.getPcbdb().getCurrentUser().is_mirror_on())
PCBcontext.getPcbdb().getCurrentUser().alter_mirror_mode();
}
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.sessions_fragment_container, fragment,fragment_label)
.commit()
;
findViewById(R.id.sessionPauseBtn).setVisibility(stop);
okBtn.setVisibility(stop);
disBtn.setVisibility(stop);
spoBtn.setVisibility(stop);
failBtn.setVisibility(stop);
supBtn.setVisibility(stop);
findViewById(R.id.sessionTopbarMethodName).setVisibility(stop);
findViewById(R.id.sessionTopbarInstructionName).setVisibility(stop);
}
}
package com.yottacode.pictogram.tabletlibrary.gui.session;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import com.yottacode.pictogram.net.websockets.ActionTalk;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tools.PCBcontext;
import java.io.IOException;
/**
* A simple {@link Fragment} subclass.
* Activities that contain this fragment must implement the
* {@link SessionFragment.OnSessionListener } interface
* to handle interaction events.
* Use the {@link SessionFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class SessionFragment extends Fragment implements ActionTalk.iActionListener {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
ListView list_pictomsg;
PictoAdapter adapter_pictomsg;
private OnSessionListener mListener=null;
public SessionFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment SessionFragment.
*/
// TODO: Rename and change types and number of parameters
public static SessionFragment newInstance(String param1, String param2) {
SessionFragment fragment = new SessionFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_session, container, false);
list_pictomsg = (ListView) view.findViewById(R.id.session_pictomsg_list);
adapter_pictomsg=new PictoAdapter(this.getContext());
list_pictomsg.setAdapter(adapter_pictomsg);
list_pictomsg.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
((PictoAdapter)list_pictomsg.getAdapter()).setCurrentMsg(position);
((PictoAdapter)list_pictomsg.getAdapter()).notifyDataSetChanged();
}
});
return view;
}
@SuppressWarnings("deprecation")
@Override
public void onAttach(Activity context) {
super.onAttach(context);
if ( mListener==null)
if (context instanceof OnSessionListener) {
mListener = (OnSessionListener ) context;
PCBcontext.getVocabulary().addActionTalkListener(this);
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if ( mListener==null)
if (context instanceof OnSessionListener ) {
mListener = (OnSessionListener ) context;
PCBcontext.getVocabulary().addActionTalkListener(this);
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
PCBcontext.getVocabulary().removeActionTalkListener(this);
mListener = null;
}
@Override
public void action(action action, int picto_cat, int picto_id) {
Log.e(this.getClass().getCanonicalName(),"ACTION VOC");
try {
Bitmap bmp=PCBcontext.getVocabulary().get_picto(picto_cat,picto_id).get_bitmap(getContext());
this.adapter_pictomsg.addItem(bmp);
getActivity().runOnUiThread(new Runnable() {
public void run() {
adapter_pictomsg.notifyDataSetChanged();
}});
} catch (IOException e) {
e.printStackTrace();
}
}
public void newMsg(Bitmap bmp) {
Log.e(this.getClass().getCanonicalName(),"ACTION VOC");
this.adapter_pictomsg.addItem(bmp);
this.adapter_pictomsg.newMsg();
getActivity().runOnUiThread(new Runnable() {
public void run() {
adapter_pictomsg.notifyDataSetChanged();
}});
}
/**
* This interface must be implemented by activities that contain this
* fragment to allow an interaction in this fragment to be communicated
* to the activity and potentially other fragments contained in that
* activity.
* <p>
* See the Android Training lesson <a href=
* "http://developer.android.com/training/basics/fragments/communicating.html"
* >Communicating with Other Fragments</a> for more information.
*/
public interface OnSessionListener {
// TODO: Update argument type and name
void onSessionInteraction(Uri uri);
}
}
...@@ -6,7 +6,7 @@ import android.support.v4.app.NotificationCompat; ...@@ -6,7 +6,7 @@ import android.support.v4.app.NotificationCompat;
import android.util.Log; import android.util.Log;
import com.yottacode.pictogram.dao.User; import com.yottacode.pictogram.dao.User;
import com.yottacode.pictogram.net.iNetServiceDevice; import com.yottacode.pictogram.net.NetService;
import com.yottacode.pictogram.tabletlibrary.R; import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.gui.PictogramActivity; import com.yottacode.pictogram.tabletlibrary.gui.PictogramActivity;
import com.yottacode.pictogram.tabletlibrary.gui.SerialActivity; import com.yottacode.pictogram.tabletlibrary.gui.SerialActivity;
...@@ -18,7 +18,7 @@ import com.yottacode.pictogram.tools.PCBcontext; ...@@ -18,7 +18,7 @@ import com.yottacode.pictogram.tools.PCBcontext;
* @version 1.0 * @version 1.0
*/ */
public class NetServiceTablet implements iNetServiceDevice { public class NetServiceTablet implements NetService.iNetServiceDevice {
private static NotificationCompat.Builder builder; private static NotificationCompat.Builder builder;
private PictogramActivity pictogramActivity; private PictogramActivity pictogramActivity;
......
...@@ -86,6 +86,18 @@ ...@@ -86,6 +86,18 @@
android:id="@+id/loginStudentGrid" android:id="@+id/loginStudentGrid"
android:layout_gravity="center" android:layout_gravity="center"
tools:layout="@layout/fragment_new_student" /> tools:layout="@layout/fragment_new_student" />
</FrameLayout> </FrameLayout>
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/imageView4"
android:background="@drawable/pictogram_logo"
android:layout_marginRight="30dp"
android:layout_below="@+id/view"
android:layout_alignEnd="@+id/loginTopbarLayout"
android:layout_marginTop="320dp" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:orientation="vertical" android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".gui.SerialActivity"> tools:context=".gui.SerialActivity">
<ImageView <ImageView
android:layout_width="200px" android:layout_width="200px"
...@@ -51,13 +51,14 @@ ...@@ -51,13 +51,14 @@
<Button <Button
android:id="@+id/entrar_button" style="?android:textAppearanceSmall" android:id="@+id/entrar_button" style="?android:textAppearanceSmall"
android:layout_width="400px" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="11dp" android:layout_marginTop="11dp"
android:text="@string/action_entrar" android:text="@string/action_entrar"
android:textStyle="bold" android:textStyle="bold"
android:layout_below="@+id/serialpass" android:layout_below="@+id/serialpass"
android:layout_alignStart="@+id/serialpass" /> android:layout_alignStart="@+id/serialpass"
android:layout_alignParentEnd="true" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -68,12 +69,13 @@ ...@@ -68,12 +69,13 @@
android:layout_marginEnd="18dp" /> android:layout_marginEnd="18dp" />
<LinearLayout <LinearLayout
android:layout_below="@+id/entrar_button"
android:orientation="vertical" android:orientation="vertical"
android:layout_height="350px" android:layout_height="wrap_content"
android:layout_marginStart="67dp" android:layout_marginStart="67dp"
android:layout_marginTop="20dp"
android:background="@color/common_plus_signin_btn_text_dark_pressed" android:background="@color/common_plus_signin_btn_text_dark_pressed"
android:layout_width="400px" android:layout_width="200dp"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:id="@+id/stuLay"> android:id="@+id/stuLay">
...@@ -99,12 +101,14 @@ ...@@ -99,12 +101,14 @@
<LinearLayout <LinearLayout
android:orientation="vertical" android:orientation="vertical"
android:background="@color/common_google_signin_btn_text_dark_default" android:background="@color/common_google_signin_btn_text_dark_default"
android:layout_height="350px" android:layout_height="wrap_content"
android:layout_width="400px" android:layout_width="200dp"
android:layout_alignParentBottom="true" android:layout_marginStart="10dp"
android:layout_alignStart="@+id/entrar_button" android:layout_alignTop="@id/stuLay"
android:layout_marginStart="270dp" android:layout_toEndOf="@id/stuLay"
android:id="@+id/supLay">
android:id="@+id/supLay"
android:gravity="right">
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
......
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
tools:context="com.yottacode.pictogram.tabletlibrary.gui.session.SessionActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_margin="8dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="0dp"
android:id="@+id/sessionTopbarLayout">
<ImageView
android:layout_width="48dp"
android:layout_height="48dp"
android:id="@+id/sessionTopbarStudentPhoto"
android:layout_gravity="left"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:background="@color/accent_material_dark"
android:scaleType="centerCrop" />
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/sessionTopbarStudentNameLayout"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/sessionTopbarStudentPhoto"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text=""
android:id="@+id/sessionTopbarStudentFullName" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text=""
android:id="@+id/sessionTopbarStudentUserName"
android:textColor="@color/abc_secondary_text_material_light" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/methodLayout"
android:layout_centerVertical="true"
android:gravity="end"
android:layout_toLeftOf="@+id/sessionPauseBtn"
android:layout_marginRight="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text=""
android:id="@+id/sessionTopbarMethodName"
android:textColor="@color/blue" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text=""
android:id="@+id/sessionTopbarInstructionName"
android:textColor="@color/blue" />
</LinearLayout>
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/sessionPauseBtn"
android:layout_alignParentBottom="true"
android:textOff="||"
android:textOn="||"
android:layout_toLeftOf="@+id/sessionOnOffBtn"
android:textColorLink="@color/darkgreen" />
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/sessionOnOffBtn"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:textOff="REC"
android:textOn="REC"
android:textColorLink="@color/darkgreen" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="@android:color/darker_gray"
android:layout_marginBottom="16dp"
android:id="@+id/view"
android:layout_below="@+id/sessionTopbarLayout"
android:layout_marginTop="0dp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:id="@+id/sessionFragmentLayout"
android:layout_below="@+id/view"
android:layout_alignParentEnd="true"
android:layout_height="300dp">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/sessions_fragment_container"
android:layout_weight="1"
android:layout_alignParentStart="true" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"
android:id="@+id/view_as2"
android:layout_below="@+id/sessionFragmentLayout"
android:layout_alignParentEnd="true"
android:layout_marginBottom="16dp" />
<LinearLayout
android:layout_below="@+id/view_as2"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_gravity="top"
android:layout_marginBottom="10dp">
<LinearLayout
android:id="@+id/view_session_buttons"
android:layout_below="@+id/view_as2"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="84dp"
>
<Button style="@style/sessionBtn"
android:id="@+id/btn_correct"
android:background="@drawable/session_ok"
/>
<Button style="@style/sessionBtn"
android:id="@+id/btn_fail"
android:background="@drawable/session_fail"
/>
<Button style="@style/sessionBtn"
android:id="@+id/btn_spontaneous"
android:background="@drawable/session_spontaneous"
/>
<Button style="@style/sessionBtn"
android:id="@+id/btn_supervised"
android:background="@drawable/session_supervised"
/>
<Button style="@style/sessionBtn"
android:id="@+id/btn_discarded"
android:background="@drawable/session_discarded"
android:layout_marginRight="20dp" />
</LinearLayout>
</LinearLayout>
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
app:srcCompat="@drawable/pictogram_logo"
android:id="@+id/imageView3"
android:background="@drawable/pictogram_logo"
android:layout_marginRight="20dp"
android:layout_marginBottom="10dp"
android:layout_gravity="right"
android:layout_weight="1"
android:layout_below="@+id/view_as2"
android:layout_alignEnd="@+id/sessionFragmentLayout"
android:layout_marginEnd="21dp" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/sessionTopbarLayout">
<TextView
android:text="@string/session_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
tools:textStyle="normal|bold"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"
android:textStyle="normal|bold" />
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:layout_below="@+id/sessionTopbarLayout">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="4">
<TextView
android:text="@string/session_steps"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="normal|bold"
android:textAlignment="center"
android:background="@color/common_google_signin_btn_text_light_disabled" />
<ListView
android:id="@+id/methodsListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical|center|center_horizontal"
android:padding="32dp"
android:horizontalSpacing="16dp"
android:verticalSpacing="16dp"
/>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:gravity="left|center_vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="3">
<TextView
android:text="@string/session_instruction"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="normal|bold"
android:background="@color/common_google_signin_btn_text_light_disabled"
android:textAlignment="center" />
<ListView
android:id="@+id/instructionsListView"
android:gravity="center_vertical|left"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="32dp"
android:horizontalSpacing="16dp"
android:verticalSpacing="16dp"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.yottacode.pictogram.tabletlibrary.gui.session.SessionFragment"
android:orientation="vertical" >
<ListView
android:id="@+id/session_pictomsg_list"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left|start">
</ListView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/sessionName"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_centerHorizontal="true"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:gravity="center" />
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
\ No newline at end of file
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
android:layout_height="@dimen/picto_big_height" android:layout_height="@dimen/picto_big_height"
android:id="@+id/picto_grid_item_layout_big" android:id="@+id/picto_grid_item_layout_big"
android:background="@color/picto_default_background" android:background="@color/picto_default_background"
android:padding="@dimen/picto_padding"> >
<ImageView <ImageView
android:id="@+id/picto_grid_item_image_big" android:id="@+id/picto_grid_item_image_big"
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:orientation="vertical"
<ListView android:layout_height="match_parent"
android:layout_width="match_parent" android:id="@+id/session_picto_layout"
android:background="@color/picto_default_background"
android:padding="@dimen/picto_padding">
<ImageView
android:id="@+id/session_picto"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@android:id/list" /> android:layout_width="wrap_content"
</LinearLayout> android:contentDescription="" />
\ No newline at end of file
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent" android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:background="@color/common_plus_signin_btn_text_dark_disabled"> >
<TextView <TextView
android:text="Nombre" android:text="Nombre"
...@@ -14,12 +14,12 @@ ...@@ -14,12 +14,12 @@
android:textColor="@android:color/black" android:textColor="@android:color/black"
android:layout_alignTop="@+id/photo" android:layout_alignTop="@+id/photo"
android:layout_toEndOf="@+id/photo" android:layout_toEndOf="@+id/photo"
android:layout_width="250dp" android:layout_width="wrap_content"
android:layout_marginStart="15dp" /> android:layout_marginStart="15dp" />
<TextView <TextView
android:text="Apellidos" android:text="Apellidos"
android:layout_width="250dp" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/label_surname" android:id="@+id/label_surname"
android:textSize="18sp" android:textSize="18sp"
...@@ -33,8 +33,8 @@ ...@@ -33,8 +33,8 @@
app:srcCompat="@drawable/anonymous_student" app:srcCompat="@drawable/anonymous_student"
android:id="@+id/photo" android:id="@+id/photo"
android:layout_weight="0.15" android:layout_weight="0.15"
android:layout_width="50dp" android:layout_width="80dp"
android:layout_height="50dp" android:layout_height="80dp"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_alignParentStart="true" /> android:layout_alignParentStart="true" />
</RelativeLayout> </RelativeLayout>
<resources>
<string name="app_name">com.yottacode.pictogram.Tablet</string>
<item name="maxInTape" type="integer">8</item>
<item name="maxInTape_big" type="integer">6</item>
<!---session-->
<string name="session_instruction">"Instrucción"</string>
<string name="session_steps">"Fases"</string>
<string name="session_header">Seleccion instrucción y fase</string>
<string name="session_error">Error recuperando sesiones del servidor</string>
<string name="session_noinstructions">Alumno sin ninguna instrucción asignada. Por favor, asigne al menos una instrucción al alumno desde Pictogram Web</string>
<string name="session_loading">Downloading instructions</string>
<string name="session_empty">Student without any method</string>
</resources>
<resources>
<string name="app_name">com.yottacode.pictogram.Tablet</string>
<item name="maxInTape" type="integer">8</item>
<item name="maxInTape_big" type="integer">6</item>
<!---session-->
<string name="session_instruction">"Instrucción"</string>
<string name="session_steps">"Fases"</string>
<string name="session_header">Seleccion instrucción y fase</string>
<string name="session_error">Error recuperando sesiones del servidor</string>
<string name="session_noinstructions">Alumno sin ninguna instrucción asignada. Por favor, asigne al menos una instrucción al alumno desde Pictogram Web</string>
<string name="session_loading">Desargando instrucciones</string>
<string name="session_empty">Este alumno no tiene ningún método asignado. Por favor asigne un método a este alumno en</string>
</resources>
...@@ -4,4 +4,16 @@ ...@@ -4,4 +4,16 @@
<string name="supervisores">Supervisores</string> <string name="supervisores">Supervisores</string>
<item name="maxInTape" type="integer">8</item> <item name="maxInTape" type="integer">8</item>
<item name="maxInTape_big" type="integer">6</item> <item name="maxInTape_big" type="integer">6</item>
<!---session-->
<string name="session_instruction">"Instrucción"</string>
<string name="session_steps">"Fases"</string>
<string name="session_header">Select instrucion and step</string>
<string name="session_error">Error getting instructions from server</string>
<string name="session_noinstructions">Student without any instrucction assigment</string>
<string name="session_loading">Desargando instrucciones</string>
<string name="session_empty">Este alumno no tiene ningún método asignado. Por favor asigne un método a este alumno en</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
</resources> </resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="sessionBtn">
<item name="android:layout_height">64dp</item>
<item name="android:layout_width">64dp</item>
<item name="android:layout_marginLeft">20dp</item>
<item name="android:layout_gravity">center_vertical</item>
</style>
</resources>
package com.yottacode.pictogram.watch.gui; package com.yottacode.pictogram.watch.gui;
import android.app.Activity; import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle; import android.os.Bundle;
import android.support.wearable.view.WatchViewStub; import android.support.wearable.view.WatchViewStub;
import android.util.Log; import android.util.Log;
import android.widget.TextView; import android.widget.TextView;
import com.yottacode.pictogram.dao.UserLogin; import com.yottacode.pictogram.dao.UserLogin;
import com.yottacode.pictogram.net.NetService;
import com.yottacode.pictogram.net.iNetServiceDevice;
import com.yottacode.pictogram.tools.PCBcontext; import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.pictogram.watch.R; import com.yottacode.pictogram.watch.R;
import com.yottacode.pictogram.watch.net.NetServiceWatch; import com.yottacode.pictogram.watch.net.NetServiceWatch;
......
...@@ -5,7 +5,7 @@ import android.util.Log; ...@@ -5,7 +5,7 @@ import android.util.Log;
import android.widget.TextView; import android.widget.TextView;
import com.yottacode.pictogram.dao.User; import com.yottacode.pictogram.dao.User;
import com.yottacode.pictogram.net.iNetServiceDevice; import com.yottacode.pictogram.net.NetService;
import com.yottacode.pictogram.tools.PCBcontext; import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.pictogram.watch.R; import com.yottacode.pictogram.watch.R;
...@@ -16,7 +16,7 @@ import com.yottacode.pictogram.watch.R; ...@@ -16,7 +16,7 @@ import com.yottacode.pictogram.watch.R;
* @version 1.0 * @version 1.0
*/ */
public class NetServiceWatch implements iNetServiceDevice { public class NetServiceWatch implements NetService.iNetServiceDevice {
TextView status; TextView status;
Class Activity; Class Activity;
......
...@@ -123,8 +123,6 @@ ...@@ -123,8 +123,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/23.0.1/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/23.0.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.0.1/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.0.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.gms/play-services-base/9.2.1/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.gms/play-services-base/9.2.1/jars" />
...@@ -133,13 +131,11 @@ ...@@ -133,13 +131,11 @@
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.gms/play-services-wearable/9.2.1/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.gms/play-services-wearable/9.2.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.support/wearable/2.0.0-alpha2/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.support/wearable/2.0.0-alpha2/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" /> <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content> </content>
<orderEntry type="jdk" jdkName="Android API 24 Platform" jdkType="Android SDK" /> <orderEntry type="jdk" jdkName="Android API 24 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
......
...@@ -66,6 +66,12 @@ ...@@ -66,6 +66,12 @@
android:name=".kiosk.KioskService" android:name=".kiosk.KioskService"
android:exported="false" /> android:exported="false" />
<activity
android:name="com.yottacode.pictogram.tabletlibrary.gui.session.SessionActivity"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="landscape" />
</application> </application>
</manifest> </manifest>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment