Commit 5486da0b by root

Merge branch 'develop' of http://scm.ujaen.es/softuno/pictogram into develop

parents 87074dd7 c03f331d
...@@ -16,7 +16,7 @@ Para comprobar que todo funciona correctamente se ha habilitado un servidor con ...@@ -16,7 +16,7 @@ Para comprobar que todo funciona correctamente se ha habilitado un servidor con
comprueba que el código está bien escrito y funciona correctamente (actualmente sólo para el comprueba que el código está bien escrito y funciona correctamente (actualmente sólo para el
código JavaScript). Datos del servidor: código JavaScript). Datos del servidor:
- Dirección: [ararat.ujaen.es][5] - Dirección: [ci.yottacode.com][5]
- Usuario: `uruk` - Usuario: `uruk`
- Contraseña: `saruman es et` - Contraseña: `saruman es et`
...@@ -27,4 +27,4 @@ código JavaScript). Datos del servidor: ...@@ -27,4 +27,4 @@ código JavaScript). Datos del servidor:
[2]: /softuno/pictogram/tree/develop/sails [2]: /softuno/pictogram/tree/develop/sails
[3]: /softuno/pictogram/tree/develop/sails/src/assets/app [3]: /softuno/pictogram/tree/develop/sails/src/assets/app
[4]: /softuno/pictogram/tree/develop/android/Pictogram [4]: /softuno/pictogram/tree/develop/android/Pictogram
[5]: https://ararat.ujaen.es/jenkins [5]: https://ci.yottacode.com
\ No newline at end of file \ No newline at end of file
...@@ -35,6 +35,8 @@ public abstract class Action { ...@@ -35,6 +35,8 @@ public abstract class Action {
this.type=type; this.type=type;
} }
abstract public boolean is_local_action();
public String get_type() { return this.type;} public String get_type() { return this.type;}
public abstract String get_action(); public abstract String get_action();
protected JSONObject get_json() { protected JSONObject get_json() {
...@@ -79,4 +81,4 @@ public abstract class Action { ...@@ -79,4 +81,4 @@ public abstract class Action {
return null; return null;
} }
} }
\ No newline at end of file
...@@ -49,6 +49,8 @@ public abstract class PictoAction extends Action { ...@@ -49,6 +49,8 @@ public abstract class PictoAction extends Action {
return null; return null;
} }
} }
public boolean is_local_action() {return this.picto.is_local();}
public JSONObject get_json_picto() throws JSONException { public JSONObject get_json_picto() throws JSONException {
final String param_id_json="id"; final String param_id_json="id";
final String param_picto="picto"; final String param_picto="picto";
......
...@@ -59,6 +59,9 @@ public class PictosAction extends Action { ...@@ -59,6 +59,9 @@ public class PictosAction extends Action {
return null; return null;
} }
} }
public boolean is_local_action() {return false;}
private JSONObject get_json_picto(Picto picto) throws JSONException { private JSONObject get_json_picto(Picto picto) throws JSONException {
final String param_id_json="id"; final String param_id_json="id";
final String param_picto="picto"; final String param_picto="picto";
......
...@@ -54,20 +54,23 @@ public class Room { ...@@ -54,20 +54,23 @@ public class Room {
} }
public void emit(final Action action) { public void emit(final Action action) {
String token=PCBcontext.getRestapiWrapper().getToken(); if (!action.is_local_action()) {
final String token_param="token"; String token = PCBcontext.getRestapiWrapper().getToken();
Log.i(this.getClass().getName(), "Action: " + action.get_type() + " / Attributes emitted: " + action.get_json().toString()); final String token_param = "token";
try{ Log.i(this.getClass().getName(), "Action: " + action.get_type() + " / Attributes emitted: " + action.get_json().toString());
try {
this.socket.emit(action.get_action(), this.common_data(action.get_type(), action.get_json()).put(token_param, token), new Ack() { this.socket.emit(action.get_action(), this.common_data(action.get_type(), action.get_json()).put(token_param, token), new Ack() {
@Override @Override
public void call(Object... args) { public void call(Object... args) {
for (Object arg : args) for (Object arg : args)
Log.d(this.getClass().getName(), "Ack messsage:" + arg); Log.d(this.getClass().getName(), "Ack messsage:" + arg);
} }
}); });
} catch (JSONException e) { } catch (JSONException e) {
Log.e(this.getClass().getCanonicalName(), e.getClass().getCanonicalName() + e.getMessage() + "--" + e.getLocalizedMessage()); Log.e(this.getClass().getCanonicalName(), e.getClass().getCanonicalName() + e.getMessage() + "--" + e.getLocalizedMessage());
}
} }
else Log.i(this.getClass().getCanonicalName(),"Local Action "+action.get_action()+" is not emitted");
} }
/** /**
......
...@@ -20,12 +20,15 @@ public class SubscribeAction extends Action { ...@@ -20,12 +20,15 @@ public class SubscribeAction extends Action {
public static final String ACTION="/stu/subscribe"; public static final String ACTION="/stu/subscribe";
@Override
public boolean is_local_action() {
return false;
}
public SubscribeAction( ){
public SubscribeAction( ){
super(SUBSCRIBE); super(SUBSCRIBE);
} }
public String get_action() {return ACTION;} public String get_action() {return ACTION;}
} }
\ No newline at end of file
...@@ -24,6 +24,10 @@ public class UnsubscribeAction extends Action { ...@@ -24,6 +24,10 @@ public class UnsubscribeAction extends Action {
super(UNSUBSCRIBE); super(UNSUBSCRIBE);
} }
@Override
public boolean is_local_action() {
return false;
}
public String get_action() {return ACTION;} public String get_action() {return ACTION;}
} }
...@@ -82,15 +82,7 @@ public class Picto extends Img { ...@@ -82,15 +82,7 @@ public class Picto extends Img {
* @return true if it's a local pictogram * @return true if it's a local pictogram
*/ */
public boolean is_local() {return this.get_id()<0;} public boolean is_local() {return this.get_id()<0;}
/**
*
* @return de id of the picto
*/
public int get_id() {return this.id;}
public void update_id(int id) {
this.id = id;
}
/** /**
* *
* @return the location of the picto * @return the location of the picto
...@@ -344,7 +336,9 @@ public class Picto extends Img { ...@@ -344,7 +336,9 @@ public class Picto extends Img {
* @return true if current status is enabled. False in other case. * @return true if current status is enabled. False in other case.
*/ */
public boolean alter_status() { public boolean alter_status() {
String status=is_enabled() ? JSON_ATTTR_STATUS_VALUES.DISABLED : JSON_ATTTR_STATUS_VALUES.ENABLED; String status=is_enabled() ? JSON_ATTTR_STATUS_VALUES.DISABLED
: is_disabled() ? JSON_ATTTR_STATUS_VALUES.INVISIBLE
: JSON_ATTTR_STATUS_VALUES.ENABLED;
Log.i(this.getClass().getCanonicalName(),"Picto id. "+get_id()+" status enabled/disabled modified to "+is_enabled()); Log.i(this.getClass().getCanonicalName(),"Picto id. "+get_id()+" status enabled/disabled modified to "+is_enabled());
try { try {
this.attributes.put(JSON_ATTTRS.STATUS, status); this.attributes.put(JSON_ATTTRS.STATUS, status);
......
...@@ -142,12 +142,6 @@ public class NetService implements Runnable { ...@@ -142,12 +142,6 @@ public class NetService implements Runnable {
} }
public void notifyStatus() { public void notifyStatus() {
String user;
if (PCBcontext.getPcbdb()!=null) {
user=PCBcontext.getPcbdb().getCurrentUser().get_name_stu();
if (PCBcontext.getPcbdb().getCurrentUser().is_supervisor())
user += " (" + PCBcontext.getPcbdb().getCurrentUser().get_name_sup() + ")";
}
device.notifyStatus(this.updated); device.notifyStatus(this.updated);
} }
public void closeNotifyStatus(){ public void closeNotifyStatus(){
......
...@@ -40,8 +40,8 @@ public class PictoUploader { ...@@ -40,8 +40,8 @@ public class PictoUploader {
this.picto=picto; this.picto=picto;
} }
private int uploadImg( Img img) throws UnsupportedEncodingException { private boolean uploadImg( Img img) throws UnsupportedEncodingException {
int img_id; boolean success;
Bitmap bmp=null; Bitmap bmp=null;
Response<JsonObject> response=null; Response<JsonObject> response=null;
if (!img.get_filetype().equalsIgnoreCase("png")) if (!img.get_filetype().equalsIgnoreCase("png"))
...@@ -72,9 +72,13 @@ public class PictoUploader { ...@@ -72,9 +72,13 @@ public class PictoUploader {
if (response != null && response.getHeaders().code() == 200) { if (response != null && response.getHeaders().code() == 200) {
Log.i(this.getClass().getCanonicalName(), "Uploaded image result: " + response.getHeaders() + ":" + response.getResult()); Log.i(this.getClass().getCanonicalName(), "Uploaded image result: " + response.getHeaders() + ":" + response.getResult());
img_id=response.getResult().get("id").getAsInt(); int img_id=response.getResult().get("id").getAsInt();
String img_uri=response.getResult().get("uri").getAsString();
img.set_url(img_uri);
img.update_id(img_id);
success=true;
} else { } else {
img_id=-1; success=false;
Log.i(this.getClass().getCanonicalName(), "Uploaded image failed "); Log.i(this.getClass().getCanonicalName(), "Uploaded image failed ");
if (response != null) if (response != null)
Log.i(this.getClass().getCanonicalName(), "Uploaded image failed, headers: " + response.getHeaders()); Log.i(this.getClass().getCanonicalName(), "Uploaded image failed, headers: " + response.getHeaders());
...@@ -82,19 +86,19 @@ public class PictoUploader { ...@@ -82,19 +86,19 @@ public class PictoUploader {
} catch (InterruptedException e) { } catch (InterruptedException e) {
Log.e(this.getClass().getCanonicalName(), "Image upload error: " + e.getMessage()+ "Code: "+ Log.e(this.getClass().getCanonicalName(), "Image upload error: " + e.getMessage()+ "Code: "+
(response == null ? -1 : response.getHeaders().code())); (response == null ? -1 : response.getHeaders().code()));
img_id=-1; success=false;
} catch (ExecutionException e) { } catch (ExecutionException e) {
Log.e(this.getClass().getCanonicalName(), "Image upload error: " + e.getMessage()+ Log.e(this.getClass().getCanonicalName(), "Image upload error: " + e.getMessage()+
(response == null ? -1 : response.getHeaders().code())); (response == null ? -1 : response.getHeaders().code()));
img_id=-1; success=false;
} catch (IOException e) { } catch (IOException e) {
Log.e(Img.class.getCanonicalName(), "Error when decoding "+img.file_name()); Log.e(Img.class.getCanonicalName(), "Error when decoding "+img.file_name());
GUITools.show_alert(PCBcontext.getContext(), R.string.imguserLoadingErrMsg); GUITools.show_alert(PCBcontext.getContext(), R.string.imguserLoadingErrMsg);
img_id=-1; success=false;
} }
// ion.dump(); // ion.dump();
return img_id; return success;
} }
...@@ -186,7 +190,7 @@ public class PictoUploader { ...@@ -186,7 +190,7 @@ public class PictoUploader {
**/ **/
public void upload(final Context context) throws IOException { public void upload(final Context context) throws IOException {
final int local_img_id = this.picto.get_id(); final int local_img_id = this.picto.get_id();
final int img_id = uploadImg(this.picto); final boolean imgUpload_success = uploadImg(this.picto);
iPictoUploaderListener listener = new iPictoUploaderListener() { iPictoUploaderListener listener = new iPictoUploaderListener() {
int elements_uploaded = 0; int elements_uploaded = 0;
...@@ -199,15 +203,14 @@ public class PictoUploader { ...@@ -199,15 +203,14 @@ public class PictoUploader {
if (elements_uploaded == 2) { if (elements_uploaded == 2) {
PCBcontext.getPcbdb().deletePicto(local_img_id); PCBcontext.getPcbdb().deletePicto(local_img_id);
PictoUploader.this.picto.delete_bitmap(PCBcontext.getContext()); PictoUploader.this.picto.delete_bitmap(PCBcontext.getContext());
PictoUploader.this.picto.update_id(img_id);
PCBcontext.getRoom().emit(new VocabularyAction(VocabularyAction.ADD, PictoUploader.this.picto)); PCBcontext.getRoom().emit(new VocabularyAction(VocabularyAction.ADD, PictoUploader.this.picto));
GUITools.show_alert(context, R.string.upload_ok,PictoUploader.this.picto.get_translation()+":"+PictoUploader.this.picto.get_id()); GUITools.show_alert(context, R.string.upload_ok,PictoUploader.this.picto.get_translation());
} }
} }
}; };
if (img_id > 0) { if (imgUpload_success) {
uploadAttributes(img_id, listener); uploadAttributes(picto.get_id(), listener);
uploadTranslation(img_id, listener); uploadTranslation(picto.get_id(), listener);
} }
else { else {
GUITools.show_alert(context, R.string.upload_error, PictoUploader.this.picto.get_translation()); GUITools.show_alert(context, R.string.upload_error, PictoUploader.this.picto.get_translation());
......
...@@ -66,6 +66,10 @@ public class Img { ...@@ -66,6 +66,10 @@ public class Img {
public String get_type() { return this.type;} public String get_type() { return this.type;}
public String get_filetype() { return Img.FILETYPE;} public String get_filetype() { return Img.FILETYPE;}
public void update_id(int id) {
this.id = id;
}
/** /**
* Load if necessary the bitmap from disk, and it is returned. IIf it is not available, return null * Load if necessary the bitmap from disk, and it is returned. IIf it is not available, return null
* @param context * @param context
......
...@@ -39,23 +39,27 @@ public class LoginActivity extends FragmentActivity { ...@@ -39,23 +39,27 @@ public class LoginActivity extends FragmentActivity {
@TargetApi(Build.VERSION_CODES.LOLLIPOP) @TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE); requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_login); setContentView(R.layout.activity_login);
// Enable logout button // Enable logout button
final Button logoutButton = (Button) findViewById(R.id.loginTopbarLogout); final Button logoutButton = (Button) findViewById(R.id.loginTopbarLogout);
logoutButton.setEnabled(true); logoutButton.setEnabled(true);
logoutButton.setOnClickListener(new View.OnClickListener() { logoutButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent serialActivity = new Intent(getBaseContext(), SerialActivity.class); Intent serialActivity = new Intent(getBaseContext(), SerialActivity.class);
serialActivity.putExtra("resetPrevUser", true); serialActivity.putExtra("resetPrevUser", true);
startActivity(serialActivity); startActivity(serialActivity);
} }
}); });
}
@Override
protected void onStart() {
super.onStart();
// Set supervisor information on topbar // Set supervisor information on topbar
final TextView supervisorFullNameView = (TextView) findViewById(R.id.loginTopbarSupervisorFullName); final TextView supervisorFullNameView = (TextView) findViewById(R.id.loginTopbarSupervisorFullName);
......
...@@ -115,12 +115,9 @@ public class StudentFragmentGrid extends Fragment{ ...@@ -115,12 +115,9 @@ public class StudentFragmentGrid extends Fragment{
PCBcontext.set_user(new_user, intent.getStringExtra("token"), new iImgDownloaderListener() { PCBcontext.set_user(new_user, intent.getStringExtra("token"), new iImgDownloaderListener() {
@Override @Override
public void loadComplete() { public void loadComplete() {
if (progressDialog.isShowing()) { if (progressDialog.isShowing()) progressDialog.dismiss();
progressDialog.dismiss();
Intent pictogramActivity = new Intent(getActivity(), PictogramActivity.class); Intent pictogramActivity = new Intent(getActivity(), PictogramActivity.class);
startActivity(pictogramActivity); startActivity(pictogramActivity);
}
} }
@Override @Override
...@@ -128,7 +125,7 @@ public class StudentFragmentGrid extends Fragment{ ...@@ -128,7 +125,7 @@ public class StudentFragmentGrid extends Fragment{
} }
public void error(Exception e) { public void error(Exception e) {
progressDialog.dismiss(); if (progressDialog.isShowing()) progressDialog.dismiss();
GUITools.show_alert(StudentFragmentGrid.this.getActivity(), R.string.serverError, e.getMessage()); GUITools.show_alert(StudentFragmentGrid.this.getActivity(), R.string.serverError, e.getMessage());
Log.e(this.getClass().getCanonicalName(), "Server error:"+ e.getLocalizedMessage()); Log.e(this.getClass().getCanonicalName(), "Server error:"+ e.getLocalizedMessage());
} }
...@@ -168,7 +165,7 @@ public class StudentFragmentGrid extends Fragment{ ...@@ -168,7 +165,7 @@ public class StudentFragmentGrid extends Fragment{
ImgDownloader downloader = new ImgDownloader(getActivity(), new iImgDownloaderListener() { ImgDownloader downloader = new ImgDownloader(getActivity(), new iImgDownloaderListener() {
@Override @Override
public void loadComplete() { public void loadComplete() {
progressDialog.dismiss(); if (progressDialog.isShowing()) progressDialog.dismiss();
if (downloaded_students.size() > 1) { if (downloaded_students.size() > 1) {
for (int i = 0; i < imgs.size(); i++) for (int i = 0; i < imgs.size(); i++)
try { try {
...@@ -188,7 +185,7 @@ public class StudentFragmentGrid extends Fragment{ ...@@ -188,7 +185,7 @@ public class StudentFragmentGrid extends Fragment{
public void loadImg(Img image) { public void loadImg(Img image) {
} }
public void error(Exception e) { public void error(Exception e) {
progressDialog.dismiss(); if (progressDialog.isShowing()) progressDialog.dismiss();
GUITools.show_alert(PCBcontext.getContext(), R.string.serverError, e.getMessage()); GUITools.show_alert(PCBcontext.getContext(), R.string.serverError, e.getMessage());
Log.e(this.getClass().getCanonicalName(), "Server error:"+ e.getLocalizedMessage()); Log.e(this.getClass().getCanonicalName(), "Server error:"+ e.getLocalizedMessage());
} }
...@@ -209,7 +206,7 @@ public class StudentFragmentGrid extends Fragment{ ...@@ -209,7 +206,7 @@ public class StudentFragmentGrid extends Fragment{
@Override @Override
public void error(Exception e) { public void error(Exception e) {
Log.e(this.getClass().getName(), " Server restapi error: " + e.getLocalizedMessage()); Log.e(this.getClass().getName(), " Server restapi error: " + e.getLocalizedMessage());
progressDialog.dismiss(); if (progressDialog.isShowing()) progressDialog.dismiss();
GUITools.show_alert(getActivity(), R.string.loginErrorTxt, getString(R.string.serverError), new GUITools.iOKListener() { GUITools.show_alert(getActivity(), R.string.loginErrorTxt, getString(R.string.serverError), new GUITools.iOKListener() {
@Override @Override
public void ok() { public void ok() {
...@@ -222,7 +219,7 @@ public class StudentFragmentGrid extends Fragment{ ...@@ -222,7 +219,7 @@ public class StudentFragmentGrid extends Fragment{
} }
@Override @Override
public void result(JSONArray students) { public void result(JSONArray students) {
progressDialog.dismiss(); if (progressDialog.isShowing()) progressDialog.dismiss();
StudentFragmentGrid.this.downloaded_students=new Vector(); StudentFragmentGrid.this.downloaded_students=new Vector();
for (int i=0;i<students.length();i++) { for (int i=0;i<students.length();i++) {
JSONObject student; JSONObject student;
...@@ -261,8 +258,13 @@ public class StudentFragmentGrid extends Fragment{ ...@@ -261,8 +258,13 @@ public class StudentFragmentGrid extends Fragment{
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setRetainInstance(true); setRetainInstance(true);
}
@Override
public void onStart() {
super.onStart();
Intent intent=getActivity().getIntent(); Intent intent=getActivity().getIntent();
Boolean offline = intent.getBooleanExtra("offline", false); Boolean offline = intent.getBooleanExtra("offline", false);
int sup_id=intent.getIntExtra("sup_id", 0); int sup_id=intent.getIntExtra("sup_id", 0);
...@@ -293,15 +295,17 @@ public class StudentFragmentGrid extends Fragment{ ...@@ -293,15 +295,17 @@ public class StudentFragmentGrid extends Fragment{
} }
else else
download_students(sup_id); download_students(sup_id);
}
if (offline || onlineStudentsOK) showStudentsGrid();
}
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_new_student, container, false); View view = inflater.inflate(R.layout.fragment_new_student, container, false);
gridView = (GridView)view.findViewById(R.id.loginStudentGridView); gridView = (GridView) view.findViewById(R.id.loginStudentGridView);
Boolean offline = getActivity().getIntent().getBooleanExtra("offline", false); return view;
if (offline || onlineStudentsOK) showStudentsGrid();
return view;
} }
} }
...@@ -25,7 +25,8 @@ ...@@ -25,7 +25,8 @@
<EditText <EditText
android:id="@+id/edittext" android:id="@+id/edittext"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"
android:password="true" />
<!-- The "Translate!" button --> <!-- The "Translate!" button -->
<Button <Button
android:id="@+id/button" android:id="@+id/button"
...@@ -54,4 +55,4 @@ ...@@ -54,4 +55,4 @@
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_weight="1"/> android:layout_weight="1"/>
</LinearLayout> </LinearLayout>
\ No newline at end of file
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
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=".SerialActivity"> tools:context=".gui.SerialActivity">
<EditText <EditText
android:id="@+id/serialmail" android:id="@+id/serialmail"
...@@ -30,10 +30,11 @@ ...@@ -30,10 +30,11 @@
android:imeActionId="@+id/login" android:imeActionId="@+id/login"
android:imeActionLabel="@string/action_entrar" android:imeActionLabel="@string/action_entrar"
android:imeOptions="actionUnspecified" android:imeOptions="actionUnspecified"
android:inputType="text" android:inputType="textPassword"
android:maxLines="1" android:maxLines="1"
android:singleLine="true" android:singleLine="true"
android:layout_below="@+id/serialmail"/> android:layout_below="@+id/serialmail"
/>
<Button <Button
android:id="@+id/entrar_button" style="?android:textAppearanceSmall" android:id="@+id/entrar_button" style="?android:textAppearanceSmall"
......
...@@ -30,4 +30,4 @@ elif [ -e "/home/vagrant/sync/playbook.yml" ]; then ...@@ -30,4 +30,4 @@ elif [ -e "/home/vagrant/sync/playbook.yml" ]; then
else else
echo "XX Playbook not found, provision not finished" echo "XX Playbook not found, provision not finished"
exit exit
fi fi
\ No newline at end of file
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