Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
yotta
/
pictogram
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
60
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
faf359be
authored
Feb 03, 2016
by
Miguel Ángel García Cumbreras
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Varios bugs solucionados
parent
6383f43e
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
125 additions
and
28 deletions
android/.idea/workspace.xml
android/Pictogram/app/src/main/java/com/yottacode/pictogram/gui/LoginActivity.java
android/Pictogram/app/src/main/java/com/yottacode/pictogram/gui/MainActivity.java
android/Pictogram/app/src/main/java/com/yottacode/pictogram/gui/PictogramActivity.java
android/Pictogram/app/src/main/java/com/yottacode/pictogram/gui/SerialActivity.java
android/Pictogram/app/src/main/res/drawable-hdpi/back64.png
android/Pictogram/app/src/main/res/drawable-hdpi/play64.png
android/Pictogram/app/src/main/res/layout/activity_pictogram.xml
android/.idea/workspace.xml
View file @
faf359be
This diff is collapsed.
Click to expand it.
android/Pictogram/app/src/main/java/com/yottacode/pictogram/gui/LoginActivity.java
View file @
faf359be
...
@@ -51,6 +51,7 @@ public class LoginActivity extends FragmentActivity implements iRestapiListener,
...
@@ -51,6 +51,7 @@ public class LoginActivity extends FragmentActivity implements iRestapiListener,
private
static
final
String
TAG_PIC
=
"pic"
;
private
static
final
String
TAG_PIC
=
"pic"
;
private
static
final
String
TAG_LANG
=
"lang"
;
private
static
final
String
TAG_LANG
=
"lang"
;
private
static
final
String
TAG_ATTRIBUTES
=
"attributes"
;
private
static
final
String
TAG_ATTRIBUTES
=
"attributes"
;
private
static
final
String
TAG_SUPERVISION
=
"supervision"
;
private
int
sup_id
;
private
int
sup_id
;
...
@@ -153,6 +154,7 @@ public class LoginActivity extends FragmentActivity implements iRestapiListener,
...
@@ -153,6 +154,7 @@ public class LoginActivity extends FragmentActivity implements iRestapiListener,
public
void
result
(
JSONArray
students_supervisors
)
{
//FERNANDO
public
void
result
(
JSONArray
students_supervisors
)
{
//FERNANDO
try
{
try
{
// Saco los pares estudiante-supervisor
// Saco los pares estudiante-supervisor
//Log.d(LOG_TAG, "JSON:"+students_supervisors);
Log
.
d
(
LOG_TAG
,
"students_supervisors size:"
+
students_supervisors
.
length
());
Log
.
d
(
LOG_TAG
,
"students_supervisors size:"
+
students_supervisors
.
length
());
// looping through All Students
// looping through All Students
Vector
<
User
>
users
=
new
Vector
<
User
>(
students_supervisors
.
length
());
Vector
<
User
>
users
=
new
Vector
<
User
>(
students_supervisors
.
length
());
...
@@ -189,15 +191,19 @@ public class LoginActivity extends FragmentActivity implements iRestapiListener,
...
@@ -189,15 +191,19 @@ public class LoginActivity extends FragmentActivity implements iRestapiListener,
String
st_lang
=
st
.
getString
(
TAG_LANG
);
String
st_lang
=
st
.
getString
(
TAG_LANG
);
//st_lang = "es-es";
//st_lang = "es-es";
String
st_attributes
=
st
.
getString
(
TAG_ATTRIBUTES
);
String
st_attributes
=
st
.
getString
(
TAG_ATTRIBUTES
);
Integer
st_supervision
=
st
.
getInt
(
TAG_SUPERVISION
);
//Log.d(LOG_TAG, "student pic:" + st_pic);
//Log.d(LOG_TAG, "student pic:" + st_pic);
// Añado un par <student-supervisor>
// Añado un par <student-supervisor>
int
st_id_int
=
st_id
.
intValue
();
int
st_id_int
=
st_id
.
intValue
();
int
st_supervision_int
=
st_supervision
.
intValue
();
if
(
st_supervision_int
==
2
){
student
=
new
User
(
st_id_int
,
st_name
,
st_surname
,
st_pic
,
st_gender
,
st_lang
,
st_attributes
,
student
=
new
User
(
st_id_int
,
st_name
,
st_surname
,
st_pic
,
st_gender
,
st_lang
,
st_attributes
,
sup_id
,
""
,
""
,
""
,
"M"
,
"es-es"
,
""
);
sup_id
,
""
,
""
,
""
,
"M"
,
"es-es"
,
""
);
users
.
add
(
student
);
users
.
add
(
student
);
}
}
}
// Si sólo hay 1 estudiante, cargo el st_id
// Si sólo hay 1 estudiante, cargo el st_id
if
(
students_supervisors
.
length
()
==
1
){
if
(
students_supervisors
.
length
()
==
1
){
...
...
android/Pictogram/app/src/main/java/com/yottacode/pictogram/gui/MainActivity.java
View file @
faf359be
...
@@ -15,11 +15,16 @@ import android.widget.Toast;
...
@@ -15,11 +15,16 @@ import android.widget.Toast;
import
com.yottacode.pictogram.R
;
import
com.yottacode.pictogram.R
;
import
com.yottacode.pictogram.dao.Device
;
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.tools.PCBcontext
;
import
com.yottacode.pictogram.tools.PCBcontext
;
import
org.json.JSONException
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Vector
;
public
class
MainActivity
extends
Activity
{
public
class
MainActivity
extends
Activity
{
...
@@ -35,28 +40,13 @@ public class MainActivity extends Activity {
...
@@ -35,28 +40,13 @@ public class MainActivity extends Activity {
// For deactivating the lock screen (just before setContentView)
// For deactivating the lock screen (just before setContentView)
getWindow
().
addFlags
(
WindowManager
.
LayoutParams
.
FLAG_DISMISS_KEYGUARD
);
getWindow
().
addFlags
(
WindowManager
.
LayoutParams
.
FLAG_DISMISS_KEYGUARD
);
// Singleton getInstance and initialization passing the Context (to create the device)
//PCBcontext pcb = PCBcontext.getInstance();
PCBcontext
.
init
(
this
);
PCBcontext
.
init
(
this
);
Log
.
d
(
LOG_TAG
,
"PCBcontext iniciado"
);
Log
.
d
(
LOG_TAG
,
"PCBcontext iniciado
.
"
);
// Nota magc: al pasar ya siempre por serial no tiene sentido tener main ¿no?
//if (1==0){ // Fuerzo a que entre en serialActivity
Intent
serialActivity
=
new
Intent
(
this
,
SerialActivity
.
class
);
Intent
serialActivity
=
new
Intent
(
this
,
SerialActivity
.
class
);
startActivity
(
serialActivity
);
startActivity
(
serialActivity
);
/*
if (token==null || token.isEmpty()){
Intent serialActivity = new Intent(this, SerialActivity.class);
startActivity(serialActivity);
} else{
Log.d(LOG_TAG, "token leido:" + token);
Intent loginActivity = new Intent(this, LoginActivity.class);
startActivity(loginActivity);
Intent pictogramActivity = new Intent(this, PictogramActivity.class);
startActivity(pictogramActivity);
}
*/
}
}
@Override
@Override
...
...
android/Pictogram/app/src/main/java/com/yottacode/pictogram/gui/PictogramActivity.java
View file @
faf359be
...
@@ -19,6 +19,7 @@ import android.util.Log;
...
@@ -19,6 +19,7 @@ import android.util.Log;
import
android.view.Display
;
import
android.view.Display
;
import
android.view.DragEvent
;
import
android.view.DragEvent
;
import
android.view.KeyEvent
;
import
android.view.KeyEvent
;
import
android.view.MotionEvent
;
import
android.view.View
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.ViewGroup
;
import
android.view.Window
;
import
android.view.Window
;
...
@@ -78,6 +79,12 @@ public class PictogramActivity extends Activity implements iVocabularyListener,
...
@@ -78,6 +79,12 @@ public class PictogramActivity extends Activity implements iVocabularyListener,
// String constant for logs
// String constant for logs
private
final
String
LOG_TAG
=
this
.
getClass
().
getSimpleName
();
// Or .getCanonicalName()
private
final
String
LOG_TAG
=
this
.
getClass
().
getSimpleName
();
// Or .getCanonicalName()
float
xAxis
=
0
f
;
float
yAxis
=
0
f
;
float
lastXAxis
=
0
f
;
float
lastYAxis
=
0
f
;
@Override
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
...
@@ -130,6 +137,43 @@ public class PictogramActivity extends Activity implements iVocabularyListener,
...
@@ -130,6 +137,43 @@ public class PictogramActivity extends Activity implements iVocabularyListener,
tapeGridView
.
getLayoutParams
().
width
=
width
-
120
;
tapeGridView
.
getLayoutParams
().
width
=
width
-
120
;
tapeGridView
.
requestLayout
();
tapeGridView
.
requestLayout
();
tapeGridView
.
setOnTouchListener
(
new
View
.
OnTouchListener
()
{
@Override
public
boolean
onTouch
(
View
v
,
MotionEvent
event
)
{
final
int
actionPeformed
=
event
.
getAction
();
switch
(
actionPeformed
)
{
case
MotionEvent
.
ACTION_DOWN
:
{
final
float
x
=
event
.
getX
();
final
float
y
=
event
.
getY
();
lastXAxis
=
x
;
lastYAxis
=
y
;
Log
.
d
(
LOG_TAG
,
"TOUCH X:"
+
Float
.
toString
(
lastXAxis
));
Log
.
d
(
LOG_TAG
,
"TOUCH Y:"
+
Float
.
toString
(
lastYAxis
));
break
;
}
case
MotionEvent
.
ACTION_MOVE
:
{
final
float
x
=
event
.
getX
();
final
float
y
=
event
.
getY
();
final
float
dx
=
x
-
lastXAxis
;
final
float
dy
=
y
-
lastYAxis
;
xAxis
+=
dx
;
yAxis
+=
dy
;
Log
.
d
(
LOG_TAG
,
"MOVE X:"
+
Float
.
toString
(
xAxis
));
Log
.
d
(
LOG_TAG
,
"MOVE Y:"
+
Float
.
toString
(
yAxis
));
break
;
}
}
return
true
;
}
});
final
GridView
panelGridView
=
(
GridView
)
findViewById
(
R
.
id
.
panel_grid_view
);
final
GridView
panelGridView
=
(
GridView
)
findViewById
(
R
.
id
.
panel_grid_view
);
final
ImageButton
deleteButton
=
(
ImageButton
)
findViewById
(
R
.
id
.
button_delete
);
final
ImageButton
deleteButton
=
(
ImageButton
)
findViewById
(
R
.
id
.
button_delete
);
//final Button deleteAllButton = (Button) findViewById(R.id.button_delete_all);
//final Button deleteAllButton = (Button) findViewById(R.id.button_delete_all);
...
@@ -167,6 +211,7 @@ public class PictogramActivity extends Activity implements iVocabularyListener,
...
@@ -167,6 +211,7 @@ public class PictogramActivity extends Activity implements iVocabularyListener,
//rowNumberAdapter.notifyDataSetChanged();
//rowNumberAdapter.notifyDataSetChanged();
Picto
p
=
panelAdapter
.
getItem
(
position
);
Picto
p
=
panelAdapter
.
getItem
(
position
);
if
(
p
!=
null
&&
!
p
.
is_invisible
()
&&
p
.
is_enabled
()){
Log
.
d
(
LOG_TAG
,
"Clic en picto: "
+
p
.
toString
());
Log
.
d
(
LOG_TAG
,
"Clic en picto: "
+
p
.
toString
());
//Log.d(LOG_TAG, "STATUS: " + p.get_status());
//Log.d(LOG_TAG, "STATUS: " + p.get_status());
...
@@ -228,6 +273,7 @@ public class PictogramActivity extends Activity implements iVocabularyListener,
...
@@ -228,6 +273,7 @@ public class PictogramActivity extends Activity implements iVocabularyListener,
}
}
}
}
}
}
}
});
});
// onLongClick picto del panelGridView (para empezar a arrastrarlo hacia el tape)
// onLongClick picto del panelGridView (para empezar a arrastrarlo hacia el tape)
...
@@ -297,6 +343,11 @@ public class PictogramActivity extends Activity implements iVocabularyListener,
...
@@ -297,6 +343,11 @@ public class PictogramActivity extends Activity implements iVocabularyListener,
tapeAdapter
.
deleteAll
();
tapeAdapter
.
deleteAll
();
tapeAdapter
.
notifyDataSetChanged
();
tapeAdapter
.
notifyDataSetChanged
();
panelAdapter
.
setColor
(
Color
.
parseColor
(
"#AFAFAF"
));
RelativeLayout
rl
=
(
RelativeLayout
)
findViewById
(
R
.
id
.
pictogramLayout
);
rl
.
setBackgroundColor
(
Color
.
parseColor
(
"#BDBDBD"
));
// Load the categories
// Load the categories
load_pictos
(
arg0
);
load_pictos
(
arg0
);
}
}
...
...
android/Pictogram/app/src/main/java/com/yottacode/pictogram/gui/SerialActivity.java
View file @
faf359be
...
@@ -6,6 +6,7 @@ import android.app.ProgressDialog;
...
@@ -6,6 +6,7 @@ import android.app.ProgressDialog;
import
android.content.Context
;
import
android.content.Context
;
import
android.content.DialogInterface
;
import
android.content.DialogInterface
;
import
android.content.Intent
;
import
android.content.Intent
;
import
android.content.SharedPreferences
;
import
android.net.ConnectivityManager
;
import
android.net.ConnectivityManager
;
import
android.net.NetworkInfo
;
import
android.net.NetworkInfo
;
...
@@ -80,10 +81,13 @@ public class SerialActivity extends Activity implements iRestapiListener, iImgDo
...
@@ -80,10 +81,13 @@ public class SerialActivity extends Activity implements iRestapiListener, iImgDo
private
final
String
LOG_TAG
=
this
.
getClass
().
getSimpleName
();
// Or .getCanonicalName()
private
final
String
LOG_TAG
=
this
.
getClass
().
getSimpleName
();
// Or .getCanonicalName()
private
String
username
=
null
;
private
String
username
=
null
;
private
String
password
=
null
;
//A ProgressDialog object
//A ProgressDialog object
private
ProgressDialog
progressDialog
;
private
ProgressDialog
progressDialog
;
public
static
final
String
PREFS_NAME
=
"MyPrefsFile"
;
@Override
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
...
@@ -93,6 +97,13 @@ public class SerialActivity extends Activity implements iRestapiListener, iImgDo
...
@@ -93,6 +97,13 @@ public class SerialActivity extends Activity implements iRestapiListener, iImgDo
mSerialViewMail
=
(
EditText
)
findViewById
(
R
.
id
.
serialmail
);
mSerialViewMail
=
(
EditText
)
findViewById
(
R
.
id
.
serialmail
);
mSerialViewPass
=
(
EditText
)
findViewById
(
R
.
id
.
serialpass
);
mSerialViewPass
=
(
EditText
)
findViewById
(
R
.
id
.
serialpass
);
SharedPreferences
settings
=
getSharedPreferences
(
PREFS_NAME
,
0
);
username
=
settings
.
getString
(
"username"
,
""
);
password
=
settings
.
getString
(
"password"
,
""
);
// Escribo los últimos valores indicados
mSerialViewMail
.
setText
(
username
);
//mSerialViewPass.setText(password);
// NOTA: si el Mail es un mail, es un supervisor...si no es un estudiante
// NOTA: si el Mail es un mail, es un supervisor...si no es un estudiante
context
=
this
;
context
=
this
;
...
@@ -103,6 +114,40 @@ public class SerialActivity extends Activity implements iRestapiListener, iImgDo
...
@@ -103,6 +114,40 @@ public class SerialActivity extends Activity implements iRestapiListener, iImgDo
SSLDummyContext
.
init
(
getResources
().
getBoolean
(
R
.
bool
.
ssl_connect
));
SSLDummyContext
.
init
(
getResources
().
getBoolean
(
R
.
bool
.
ssl_connect
));
PCBcontext
.
init
(
this
);
PCBcontext
.
init
(
this
);
Log
.
d
(
LOG_TAG
,
"PCBcontext iniciado"
);
Log
.
d
(
LOG_TAG
,
"PCBcontext iniciado"
);
//if (PCBcontext.getDevice().getLastStuId() != 0) {
if
(!
username
.
equals
(
""
)
&&
!
password
.
equals
(
""
)){
// Tengo usuario, sigo con este usuario
RestapiWrapper
wrapper
=
PCBcontext
.
getRestapiWrapper
();
if
(
username
.
contains
(
"@"
)){
// Es un supervisor
String
operation
=
"sup/login"
;
Hashtable
<
String
,
String
>
postDataParams
=
new
Hashtable
<
String
,
String
>();
postDataParams
.
put
(
"email"
,
username
);
postDataParams
.
put
(
"password"
,
password
);
/*
postDataParams.put("idFirmware", _ANDROIDID);
postDataParams.put("desc", _MODEL);
postDataParams.put("serial", serial);
*/
wrapper
.
ask
(
operation
,
postDataParams
,
"post"
,
(
iRestapiListener
)
context
);
}
else
{
// Es un estudiante
Log
.
d
(
LOG_TAG
,
"Entro con usuario y password"
);
String
operation
=
"stu/login"
;
Hashtable
<
String
,
String
>
postDataParams
=
new
Hashtable
<
String
,
String
>();
postDataParams
.
put
(
"username"
,
username
);
postDataParams
.
put
(
"password"
,
password
);
/*
postDataParams.put("idFirmware", _ANDROIDID);
postDataParams.put("desc", _MODEL);
postDataParams.put("serial", serial);
*/
wrapper
.
ask
(
operation
,
postDataParams
,
"post"
,
(
iRestapiListener
)
context
);
}
}
else
{
// Compruebo si tengo acceso a internet
// Compruebo si tengo acceso a internet
//modificación FERNANDO
//modificación FERNANDO
if
(!
RestapiWrapper
.
ping
(
context
.
getResources
().
getString
(
R
.
string
.
server
),
"server/ping"
,
this
))
{
if
(!
RestapiWrapper
.
ping
(
context
.
getResources
().
getString
(
R
.
string
.
server
),
"server/ping"
,
this
))
{
...
@@ -126,15 +171,21 @@ public class SerialActivity extends Activity implements iRestapiListener, iImgDo
...
@@ -126,15 +171,21 @@ public class SerialActivity extends Activity implements iRestapiListener, iImgDo
mEntrarButton
.
setOnClickListener
(
new
OnClickListener
()
{
mEntrarButton
.
setOnClickListener
(
new
OnClickListener
()
{
@Override
@Override
public
void
onClick
(
View
view
)
{
public
void
onClick
(
View
view
)
{
username
=
mSerialViewMail
.
getText
().
toString
();
String
username
=
mSerialViewMail
.
getText
().
toString
();
String
password
=
mSerialViewPass
.
getText
().
toString
();
String
password
=
mSerialViewPass
.
getText
().
toString
();
// DE PRUEBA
// DE PRUEBA
// Alumno
// Alumno
//
username = "faf0001";
username
=
"faf0001"
;
//
password = "faf0001";
password
=
"faf0001"
;
// Supervisor
// Supervisor
username
=
"dofer@ujaen.es"
;
//username = "dofer@ujaen.es";
password
=
"dofer"
;
//password = "dofer";
SharedPreferences
settings
=
getSharedPreferences
(
PREFS_NAME
,
0
);
SharedPreferences
.
Editor
editor
=
settings
.
edit
();
editor
.
putString
(
"username"
,
username
);
editor
.
putString
(
"password"
,
password
);
editor
.
commit
();
RestapiWrapper
wrapper
=
PCBcontext
.
getRestapiWrapper
();
RestapiWrapper
wrapper
=
PCBcontext
.
getRestapiWrapper
();
if
(
username
.
contains
(
"@"
)){
if
(
username
.
contains
(
"@"
)){
...
@@ -168,6 +219,7 @@ public class SerialActivity extends Activity implements iRestapiListener, iImgDo
...
@@ -168,6 +219,7 @@ public class SerialActivity extends Activity implements iRestapiListener, iImgDo
});
});
}
}
}
}
}
@Override
@Override
public
void
preExecute
(){
public
void
preExecute
(){
...
...
android/Pictogram/app/src/main/res/drawable-hdpi/back64.png
0 → 100644
View file @
faf359be
1.62 KB
android/Pictogram/app/src/main/res/drawable-hdpi/play64.png
0 → 100644
View file @
faf359be
1.29 KB
android/Pictogram/app/src/main/res/layout/activity_pictogram.xml
View file @
faf359be
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:paddingLeft=
"10dp"
android:paddingLeft=
"10dp"
android:paddingRight=
"1
5
dp"
android:paddingRight=
"1
0
dp"
android:paddingTop=
"10dp"
android:paddingTop=
"10dp"
android:orientation=
"horizontal"
android:orientation=
"horizontal"
android:background=
"#BDBDBD"
android:background=
"#BDBDBD"
...
@@ -22,16 +22,14 @@
...
@@ -22,16 +22,14 @@
android:accessibilityLiveRegion=
"none"
android:accessibilityLiveRegion=
"none"
android:background=
"@android:color/holo_red_light"
android:background=
"@android:color/holo_red_light"
android:clickable=
"false"
android:clickable=
"false"
android:visibility=
"visible"
android:layout_alignParentTop=
"true"
>
android:layout_alignParentTop=
"true"
>
</GridView>
</GridView>
<ImageButton
<ImageButton
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:paddingLeft=
"20dp"
android:paddingLeft=
"20dp"
android:src=
"@drawable/
ic_action_1
"
android:src=
"@drawable/
play64
"
android:background=
"@null"
android:background=
"@null"
android:id=
"@+id/button_tts"
android:id=
"@+id/button_tts"
android:layout_toRightOf=
"@+id/tape_grid_view"
android:layout_toRightOf=
"@+id/tape_grid_view"
...
@@ -41,11 +39,11 @@
...
@@ -41,11 +39,11 @@
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:paddingLeft=
"20dp"
android:paddingLeft=
"20dp"
android:src=
"@drawable/
ic_action
"
android:src=
"@drawable/
back64
"
android:background=
"@null"
android:background=
"@null"
android:id=
"@+id/button_delete"
android:id=
"@+id/button_delete"
android:layout_toRightOf=
"@+id/tape_grid_view"
android:layout_toRightOf=
"@+id/tape_grid_view"
android:layout_
alignParentTop=
"true
"
/>
android:layout_
below=
"@+id/button_tts
"
/>
<GridView
<GridView
android:id=
"@+id/panel_grid_view"
android:id=
"@+id/panel_grid_view"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment