Refactorización a Pictogram Communicator y Pictogram Supervisor

working in several issues
parent c9c3dc3d
Showing with 935 additions and 1188 deletions
...@@ -265,12 +265,17 @@ public class UserLogin { ...@@ -265,12 +265,17 @@ public class UserLogin {
} }
public void login(String username, String password, Activity activity, Class PictogramActivity, Class LoginActivity) { public void login(String username, String password, Activity activity, Class PictogramActivity, Class LoginActivity) {
if (PCBcontext.is_user_logged()) PCBcontext.unset_user(); if (PCBcontext.is_user_logged()) PCBcontext.unset_user();
boolean online= RestapiWrapper.ping(activity.getResources().getString(R.string.server), "server/ping"); boolean online = RestapiWrapper.ping(activity.getResources().getString(R.string.server), "server/ping");
if (isSupervisorLoginPattern(username)) if (isSupervisorLoginPattern(username))
manageSupervisorLogin(username,password,online, activity, PictogramActivity, LoginActivity); if (PCBcontext.getContext().getPackageName().equals("com.yottacode.pictogram.communicator"))
else GUITools.show_alert(PCBcontext.getContext(), R.string.login_ilegaluser);
manageStudentLogin(username,password,online, activity, PictogramActivity); else
manageSupervisorLogin(username, password, online, activity, PictogramActivity, LoginActivity);
else if (!PCBcontext.getContext().getPackageName().equals("com.yottacode.pictogram.communicator"))
GUITools.show_alert(PCBcontext.getContext(),R.string.login_ilegaluser);
else
manageStudentLogin(username,password,online, activity, PictogramActivity);
} }
} }
...@@ -432,6 +432,19 @@ public class Vocabulary implements Iterable<Picto> { ...@@ -432,6 +432,19 @@ public class Vocabulary implements Iterable<Picto> {
} }
return visible; return visible;
} }
/**
* A vocabulary is visible iif it has at least an enabled concept
* @return
*/
public boolean isVisibleAnyPicto() {
boolean visible=false;
for (Picto picto : this.pictos.get(Picto.NO_CATEGORY)) {
visible=!picto.is_invisible();
if (visible) break;
}
return visible;
}
/* /*
* It saves locally a new picto obtained from the PCB * It saves locally a new picto obtained from the PCB
*/ */
......
...@@ -75,7 +75,6 @@ ...@@ -75,7 +75,6 @@
<string name="default_tts_voice_female">en-gb-x-fis#female_1-local</string> <string name="default_tts_voice_female">en-gb-x-fis#female_1-local</string>
<string name="crop_TextRequired">Please, introduce a message for the pictogram</string> <string name="crop_TextRequired">Please, introduce a message for the pictogram</string>
<string name="crop">Crop</string>
<string name="titleCropper">New pictogram</string> <string name="titleCropper">New pictogram</string>
<string name="uploadingImage">Uploading image</string> <string name="uploadingImage">Uploading image</string>
<string name="toStudentList">Student list</string> <string name="toStudentList">Student list</string>
...@@ -85,7 +84,8 @@ ...@@ -85,7 +84,8 @@
<string name="fa_exclamation_triangle">&#xf071;</string> <string name="fa_exclamation_triangle">&#xf071;</string>
<string name="fa_user_plus">&#xf234;</string> <string name="fa_user_plus">&#xf234;</string>
<string name="fa_question_circle">&#xf059;</string> <string name="fa_question_circle">&#xf059;</string>
<string name="google_play_student_apk">https://play.google.com/store/apps/details?id=com.yottacode.communicator</string> <string name="google_play_student_apk">https://play.google.com/store/apps/details?id=com.yottacode.pictogram.communicator</string>
<string name="google_play_supervisor_apk">https://play.google.com/store/apps/details?id=com.yottacode.supervisor</string> <string name="google_play_supervisor_apk">https://play.google.com/store/apps/details?id=com.yottacode.pictogram.supervisor</string>
<string name="login_ilegaluser">\" \"</string>
</resources> </resources>
...@@ -82,5 +82,6 @@ ...@@ -82,5 +82,6 @@
<string name="fa_user_plus">&#xf234;</string> <string name="fa_user_plus">&#xf234;</string>
<string name="google_play_student_apk">https://play.google.com/store/apps/details?id=com.yottacode.communicator</string> <string name="google_play_student_apk">https://play.google.com/store/apps/details?id=com.yottacode.communicator</string>
<string name="google_play_supervisor_apk">https://play.google.com/store/apps/details?id=com.yottacode.supervisor</string> <string name="google_play_supervisor_apk">https://play.google.com/store/apps/details?id=com.yottacode.supervisor</string>
<string name="login_ilegaluser">\" \"</string>
</resources> </resources>
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
<string name="userLoadingMsg">Cargando alumnos. Por favor espere.</string> <string name="userLoadingMsg">Cargando alumnos. Por favor espere.</string>
<string name="imguserLoadingMsg">Cargando imágenes de los alumnos. Por favor espere.</string> <string name="imguserLoadingMsg">Cargando imágenes de los alumnos. Por favor espere.</string>
<string name="imguserLoadingErrMsg">Imagen con formato no válido.</string> <string name="imguserLoadingErrMsg">Imagen con formato no válido.</string>
<item name="login_ilegaluser" type="string">" "</item>
<string name="noStudentsError">El usuario indicado no tiene alumnos asignados. Asigne estudiantes desde el panel de control</string> <string name="noStudentsError">El usuario indicado no tiene alumnos asignados. Asigne estudiantes desde el panel de control</string>
...@@ -84,6 +85,6 @@ ...@@ -84,6 +85,6 @@
<string name="fa_exclamation_triangle">&#xf071;</string> <string name="fa_exclamation_triangle">&#xf071;</string>
<string name="fa_user_plus">&#xf234;</string> <string name="fa_user_plus">&#xf234;</string>
<string name="fa_question_circle">&#xf059;</string> <string name="fa_question_circle">&#xf059;</string>
<string name="google_play_student_apk">https://play.google.com/store/apps/details?id=com.yottacode.communicator</string> <string name="google_play_student_apk">https://play.google.com/store/apps/details?id=com.yottacode.pictogram.communicator</string>
<string name="google_play_supervisor_apk">https://play.google.com/store/apps/details?id=com.yottacode.supervisor</string> <string name="google_play_supervisor_apk">https://play.google.com/store/apps/details?id=com.yottacode.pictogram.supervisor</string>
</resources> </resources>
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.READ_CALL_LOG" /> <uses-permission android:name="android.permission.READ_CALL_LOG" />
<application <application
android:name="com.yottacode.pictogram.communicator.kiosk.AppContext"
android:allowBackup="true" android:allowBackup="true"
android:icon="@drawable/ic_launcher" android:icon="@drawable/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
...@@ -32,7 +31,8 @@ ...@@ -32,7 +31,8 @@
android:screenOrientation="landscape"> android:screenOrientation="landscape">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.HOME" />
      <category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
android:screenOrientation="landscape" /> android:screenOrientation="landscape" />
<activity <activity
android:name="com.yottacode.pictogram.tabletlibrary.gui.communicator.VOCA" android:name="com.yottacode.pictogram.tabletlibrary.gui.communicator.VOCA"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:exported="true" android:exported="true"
android:label="@string/app_name" android:label="@string/app_name"
android:launchMode="singleTop" android:launchMode="singleTop"
...@@ -62,18 +63,15 @@ ...@@ -62,18 +63,15 @@
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="landscape" /> android:screenOrientation="landscape" />
<!-- Intent Filter to run the app when the boot is completed --> <!-- Intent Filter to run the app when the boot is completed -->
<receiver android:name="com.yottacode.pictogram.communicator.kiosk.BootReceiver"> <receiver android:name="com.yottacode.pictogram.communicator.BootReceiver">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter> </intent-filter>
</receiver> </receiver>
<!-- Service for restarting the app when another app go to foreground -->
<service
android:name="com.yottacode.pictogram.communicator.kiosk.KioskService"
android:exported="false" />
<activity <activity
android:name="com.yottacode.pictogram.tabletlibrary.gui.session.SessionActivity" android:name="com.yottacode.pictogram.supervisor.gui.session.SessionActivity"
android:exported="true" android:exported="true"
android:label="@string/app_name" android:label="@string/app_name"
android:launchMode="singleInstance" android:launchMode="singleInstance"
...@@ -85,6 +83,5 @@ ...@@ -85,6 +83,5 @@
android:label="@string/app_name" android:label="@string/app_name"
android:launchMode="singleInstance" android:launchMode="singleInstance"
android:screenOrientation="landscape" /> android:screenOrientation="landscape" />
</application> </application>
</manifest> </manifest>
package com.yottacode.pictogram.communicator.kiosk; package com.yottacode.pictogram.communicator;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
......
package com.yottacode.pictogram.communicator.kiosk;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.PowerManager;
/**
* Created by emblanco on 14/10/15.
*/
public class AppContext extends Application {
private AppContext instance;
private PowerManager.WakeLock wakeLock;
private OnScreenOffReceiver onScreenOffReceiver;
@Override
public void onCreate() {
super.onCreate();
instance = this;
registerKioskModeScreenOffReceiver();
startKioskService(); // Service for restarting the app when another app go to foreground
}
private void registerKioskModeScreenOffReceiver() {
// register screen off receiver
final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
onScreenOffReceiver = new OnScreenOffReceiver();
registerReceiver(onScreenOffReceiver, filter);
}
public PowerManager.WakeLock getWakeLock() {
if(wakeLock == null) {
// lazy loading: first call, create wakeLock via PowerManager.
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "wakeup");
}
return wakeLock;
}
// Service for restarting the app when another app go to foreground
private void startKioskService() {
startService(new Intent(this, KioskService.class));
}
}
package com.yottacode.pictogram.communicator.kiosk;
import android.app.ActivityManager;
import android.app.NotificationManager;
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.util.Log;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* Created by emblanco on 15/10/15.
*
* Since Android 4 there is no effective method to deactivate the home button.
* That is the reason why we need to do a little hack.
* In general the idea is to detect when a new application is in foreground and restart
* your activity immediately.
*
* The thread checks every two seconds if the app is running in foreground.
* If not, the thread will immediately recreate your activity.
*
*/
public class KioskService extends Service {
private static final long INTERVAL = TimeUnit.SECONDS.toMillis(2); // periodic interval to check in seconds -> 2 seconds
private static final String TAG = KioskService.class.getSimpleName();
private static final String PREF_KIOSK_MODE = "pref_kiosk_mode";
private Thread t = null;
private Context ctx = null;
private boolean running = false;
@Override
public void onDestroy() {
Log.i(TAG, "Stopping service 'KioskService'");
running =false;
NotificationManager mNotificationManager =
(NotificationManager)this.getBaseContext().getSystemService(this.getBaseContext().NOTIFICATION_SERVICE);
mNotificationManager.cancel(666);
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "Starting service 'KioskService'");
running = true;
ctx = this;
// start a thread that periodically checks if your app is in the foreground
t = new Thread(new Runnable() {
@Override
public void run() {
do {
handleKioskMode();
try {
Thread.sleep(INTERVAL);
} catch (InterruptedException e) {
Log.i(TAG, "Thread interrupted: 'KioskService'");
}
}while(running);
stopSelf();
}
});
t.start();
return Service.START_NOT_STICKY;
}
private void handleKioskMode() {
// is Kiosk Mode active?
if(isKioskModeActive(this)) {
// is App in background?
if(isInBackground()) {
restoreApp(); // restore!
}
}
}
private boolean isInBackground() {
ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
return (!ctx.getApplicationContext().getPackageName().equals(componentInfo.getPackageName()));
}
private void restoreApp() {
// Restart activity
Intent i = new Intent(ctx, com.yottacode.pictogram.tabletlibrary.gui.login.SerialActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(i);
}
public boolean isKioskModeActive(final Context context) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
return sp.getBoolean(PREF_KIOSK_MODE, false);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
package com.yottacode.pictogram.communicator.kiosk;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.PowerManager;
import android.preference.PreferenceManager;
/**
* Created by emblanco on 14/10/15.
*
*
Short power button press:
It can detect a short button press by handling the ACTION_SCREEN_OFF intent and kick the screen
back to life with acquiring a wake lock.
*
*
*
*/
public class OnScreenOffReceiver extends BroadcastReceiver {
private static final String PREF_KIOSK_MODE = "pref_kiosk_mode";
@Override
public void onReceive(Context context, Intent intent) {
if(Intent.ACTION_SCREEN_OFF.equals(intent.getAction())){
AppContext ctx = (AppContext) context.getApplicationContext();
// is Kiosk Mode active?
if(isKioskModeActive(ctx)) {
wakeUpDevice(ctx);
}
}
}
private void wakeUpDevice(AppContext context) {
PowerManager.WakeLock wakeLock = context.getWakeLock(); // get WakeLock reference via AppContext
if (wakeLock.isHeld()) {
wakeLock.release(); // release old wake lock
}
// create a new wake lock...
wakeLock.acquire();
// ... and release again
wakeLock.release();
}
private boolean isKioskModeActive(final Context context) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
return sp.getBoolean(PREF_KIOSK_MODE, false);
}
}
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<string name="app_name">Pictogram Communicator</string> <string name="app_name">Pictogram Communicator</string>
<string name="ilegal_user">There is not any supervisor named</string> <string name="ilegal_user">There is not any supervisor named</string>
<string name="new_version_detail">Pulse OK para proceder con la instalación</string> <string name="new_version_detail">Pulse OK para proceder con la instalación</string>
<!-- <string name="new_version_downloading">Please wait, downloading new version </string> --> <string name="login_ilegaluser">Please, login as student or use Pictogram Supervisor </string>
</resources> </resources>
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<string name="app_name">Pictogram Communicator</string> <string name="app_name">Pictogram Communicator</string>
<string name="ilegal_user"> No existe ningún supervisor </string> <string name="ilegal_user"> No existe ningún supervisor </string>
<string name="new_version_detail">Pulse OK para proceder con la instalación</string> <string name="new_version_detail">Pulse OK para proceder con la instalación</string>
<!-- <string name="new_version_downloading">Por favor espere, descargando nueva versión </string> --> <string name="login_ilegaluser">Utilice una cuenta de estudiante o bien ejecute Pictogram Spervisor </string>
</resources> </resources>
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
<resources> <resources>
<string name="app_name">Pictogram Communicator</string> <string name="app_name">Pictogram Communicator</string>
<string name="ilegal_user">There is not any supervisor named</string> <string name="ilegal_user">There is not any supervisor named</string>
<string name="new_version_detail">Por favor, visite Google Play para instalar la nueva versión</string> <string name="login_ilegaluser">Please, login as student or use Pictogram Supervisor </string>
<!-- <string name="new_version_downloading">Por favor espere, descargando nueva versión </string> -->
</resources> </resources>
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
android:screenOrientation="landscape"> android:screenOrientation="landscape">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
...@@ -49,18 +48,32 @@ ...@@ -49,18 +48,32 @@
android:label="@string/title_activity_login_activity_fragments" android:label="@string/title_activity_login_activity_fragments"
android:screenOrientation="landscape" /> android:screenOrientation="landscape" />
<activity <activity
android:name="com.yottacode.pictogram.tabletlibrary.gui.communicator.VOCA" android:name="com.yottacode.pictogram.supervisor.gui.VocabularyManager"
android:exported="true" android:exported="true"
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.supervisor.gui.VOCAS"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="landscape" />
<activity <activity
android:name="com.yottacode.pictogram.tabletlibrary.gui.session.SessionActivity" android:name=".gui.session.SessionActivity"
android:exported="true" android:exported="true"
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.communicator.EmptySceneActivity"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat"
android:screenOrientation="landscape" />
</application> </application>
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator; package com.yottacode.pictogram.supervisor.gui;
import com.yottacode.pictogram.tabletlibrary.R;
import android.animation.ObjectAnimator; import android.animation.ObjectAnimator;
import android.content.Context; import android.content.Context;
import android.content.res.TypedArray;
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.support.annotation.ColorRes;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.TypedValue; import android.util.TypedValue;
import android.widget.ImageView;
import com.yottacode.pictogram.tabletlibrary.R;
public class BotonCircular extends android.support.v7.widget.AppCompatImageView { public class BotonCircular extends android.support.v7.widget.AppCompatImageView {
......
package com.yottacode.pictogram.supervisor.gui;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.tools.PCBcontext;
import java.util.LinkedList;
import java.util.Vector;
public class PictoGridAdapter extends ArrayAdapter {
private LinkedList<Picto> pictoLinkedList;
private final String LOG_TAG = this.getClass().getSimpleName();
private Vector<Picto> pictoLinkedList_inTape;
private Vector<Picto> pictoLinkedList_inGrid;
public PictoGridAdapter(LinkedList<Picto> pictoLinkedList){
super(PCBcontext.getContext(), PictoItemViewGenerator.LAYOUT, pictoLinkedList);
this.pictoLinkedList = pictoLinkedList;
pictoLinkedList_inTape=new Vector<>(5);
pictoLinkedList_inGrid=new Vector<>(5);
}
@Override
public int getCount() {
return this.pictoLinkedList.size();
}
@Override
public Picto getItem(int position) {
return this.pictoLinkedList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Picto picto=this.pictoLinkedList.get(position);
int igrid=this.pictoLinkedList_inGrid.indexOf(picto);
int itape = this.pictoLinkedList_inTape.indexOf(picto);
if (itape >= 0)
picto.set_visible(false);
if (igrid>=0)
picto.set_visible(true);
View view = PictoItemViewGenerator.getPictoView(
picto,
convertView,
parent
);
return view;
}
public void allPictosInGrid() {
for (Picto picto: pictoLinkedList_inTape) {
pictoLinkedList_inGrid.add(picto);
}
notifyDataSetChanged();
}
}
package com.yottacode.pictogram.supervisor.gui;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.WordTools;
import java.io.IOException;
import java.util.ArrayList;
/**
* This class is used for generating PictoViews which will be inserted inside a picto grid
* or a picto tape.
*/
public class PictoItemViewGenerator {
public static final int LAYOUT = R.layout.picto_grid_item;
public static final int LAYOUT_BIG = R.layout.picto_grid_item_big;
private static final byte MAX_LINE_LENGTH = 12;
private static final byte MAX_LINE_LENGTH_FULL = 7;
private static final String LOG_TAG = PictoItemViewGenerator.class.getCanonicalName();
public static int mirror_color=0;
/**
*
* @param picto Pictogram to set the legend text
* @return the text modified
*/
private static String format_legend(Picto picto, int maxlength,boolean isFull) {
String texto=picto.get_translation().toUpperCase();
if(!isFull) return texto;
WordTools wordTools=new WordTools();
if (texto.length()>maxlength) {
String[] words = texto.split(" ");
texto="";
for (String word: words) {
ArrayList<StringBuffer> separated_word=wordTools.getLines(word,maxlength);
StringBuffer last_word=separated_word.get(separated_word.size()-1);
separated_word.remove(separated_word.get(separated_word.size()-1));
for (StringBuffer line: separated_word)
texto+=line+"-\n";
texto+=last_word+"\n";
}
texto=texto.substring(0,texto.length()-1);
}
return texto;
}
/**
*
* @param picto
* @param convertView
* @param parent
* @return
*/
public static View getPictoView(Picto picto, View convertView, ViewGroup parent) {
return getPictoView(picto, convertView, parent, false);
}
/**
*
* @param picto Pictogram to show
* @param convertView View object
* @param parent
* @param preventMirror
* @return Picto view
*/
public static View getPictoView(Picto picto, View convertView, ViewGroup parent, boolean preventMirror) {
RelativeLayout layoutWrapper;
FrameLayout layout;
final ImageView pictoImage;
ImageView redCrossImage;
TextView legend;
TextView legend_full;
// View init
if (convertView == null)
convertView = LayoutInflater.from(parent.getContext()).inflate(PCBcontext.getPcbdb().getCurrentUser().is_picto_size_big() ? LAYOUT_BIG : LAYOUT, parent, false);
// Padding respect to the tape
if (parent.getId() == R.id.tape_grid_view)
convertView.setPadding(0,0,0,0);
// Picto size
if (PCBcontext.getPcbdb().getCurrentUser().is_picto_size_big()) {
layoutWrapper = (RelativeLayout) convertView.findViewById(R.id.picto_grid_item_layout_wrapper_big);
layout = (FrameLayout) convertView.findViewById(R.id.picto_grid_item_layout_big);
pictoImage = (ImageView) convertView.findViewById(R.id.picto_grid_item_image_big);
redCrossImage = (ImageView) convertView.findViewById(R.id.picto_grid_item_redcross_big);
legend = (TextView) convertView.findViewById(R.id.legend_text_big);
legend_full = (TextView) convertView.findViewById(R.id.legend_text_big_full);
} else {
layoutWrapper = (RelativeLayout) convertView.findViewById(R.id.picto_grid_item_layout_wrapper);
layout = (FrameLayout) convertView.findViewById(R.id.picto_grid_item_layout);
pictoImage = (ImageView) convertView.findViewById(R.id.picto_grid_item_image);
redCrossImage = (ImageView) convertView.findViewById(R.id.picto_grid_item_redcross);
legend = (TextView) convertView.findViewById(R.id.legend_text);
legend_full = (TextView) convertView.findViewById(R.id.legend_text_full);
}
layout.setBackgroundColor(convertView.getResources().getColor(R.color.picto_default_background));
redCrossImage.setVisibility(View.GONE);
layoutWrapper.setVisibility(View.GONE);
pictoImage.setVisibility(View.GONE);
legend.setVisibility(View.GONE);
legend_full.setVisibility(View.GONE);
pictoImage.setImageBitmap(null);
layoutWrapper.setAlpha(1f);
// Picto visibility
if (PCBcontext.getActivityContext().getClass().getSimpleName().equals("VocabularyManager") || (picto != null && !picto.is_invisible())) {
layoutWrapper.setVisibility(View.VISIBLE);
pictoImage.setVisibility(View.VISIBLE);
layoutWrapper.setBackground(convertView.getResources().getDrawable(R.drawable.picto_grid_item_border));
if (picto!=null) {
layoutWrapper.setAlpha(!picto.is_invisible() ? 1.00f : PCBcontext.getActivityContext().getClass().getSimpleName().equals("VocabularyManager") ? 0.25f : 0f);
try {
Bitmap bm = picto.get_bitmap(PCBcontext.getContext());
switch (picto.get_legend()) {
case "none":
legend.setVisibility(View.GONE);
legend_full.setVisibility(View.GONE);
break;
case "normal":
legend.setText(format_legend(picto, MAX_LINE_LENGTH, false));
legend.setVisibility(View.VISIBLE);
legend_full.setVisibility(View.GONE);
break;
default:
legend_full.setText(format_legend(picto, MAX_LINE_LENGTH_FULL, true));
legend.setVisibility(View.GONE);
legend_full.setVisibility(View.VISIBLE);
}
pictoImage.setImageBitmap(bm);
if (picto.is_magnify()) {
pictoImage.setScaleX(1.2f);
pictoImage.setScaleY(1.2f);
}
if (picto.is_disabled())
redCrossImage.setVisibility(View.VISIBLE);
if (picto.is_category())
layout.setBackgroundColor(picto.get_color());
if (picto.is_mirror() && !preventMirror) {
int color[] = {Color.WHITE, Color.LTGRAY, Color.GRAY, Color.DKGRAY, Color.BLACK, Color.DKGRAY, Color.GRAY, Color.LTGRAY, Color.WHITE};
float scale[] = {1f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.4f, 1.3f, 1.2f, 1.1f};
mirror_color++;
pictoImage.setScaleX(scale[mirror_color % scale.length]);
pictoImage.setScaleY(scale[mirror_color % scale.length]);
if (picto.is_highlight_background())
layout.setBackgroundColor(color[mirror_color % color.length]);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return convertView;
}
}
package com.yottacode.pictogram.tabletlibrary.gui.communicator; package com.yottacode.pictogram.supervisor.gui;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
...@@ -7,8 +7,8 @@ import android.widget.ImageView; ...@@ -7,8 +7,8 @@ import android.widget.ImageView;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import com.yottacode.pictogram.dao.Picto; import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.supervisor.gui.cropper.EditPictoActivity;
import com.yottacode.pictogram.tabletlibrary.R; import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.EditPictoActivity;
import com.yottacode.pictogram.tools.PCBcontext; import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.BitmapTools; import com.yottacode.tools.BitmapTools;
...@@ -125,7 +125,7 @@ public class PictoMenu { ...@@ -125,7 +125,7 @@ public class PictoMenu {
BitmapTools.save_temporal(bitmap); BitmapTools.save_temporal(bitmap);
intent.putExtra(IS_EDIT,true); intent.putExtra(IS_EDIT,true);
activity.startActivityForResult(intent,EditPictoActivity.EDIT_PICTO_REQUEST); activity.startActivityForResult(intent, EditPictoActivity.EDIT_PICTO_REQUEST);
} }
/**Function for build a radial menu /**Function for build a radial menu
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator; package com.yottacode.pictogram.supervisor.gui;
import java.util.ArrayList;
import java.util.List;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.graphics.Canvas;
import android.graphics.*; import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.util.Log; import android.view.MotionEvent;
import android.view.*; import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.AccelerateInterpolator; import android.view.animation.AccelerateInterpolator;
import android.view.animation.AlphaAnimation; import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet; import android.view.animation.AnimationSet;
import android.view.animation.DecelerateInterpolator; import android.view.animation.DecelerateInterpolator;
import android.view.animation.RotateAnimation; import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation; import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation; import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.yottacode.pictogram.dao.Picto; import java.util.ArrayList;
import com.yottacode.pictogram.tools.PCBcontext; import java.util.List;
public class RadialMenuWidget extends View { public class RadialMenuWidget extends View {
......
package com.yottacode.pictogram.supervisor.gui;
import android.annotation.TargetApi;
import android.os.Build;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.dao.User;
import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.pictogram.tts.TTSHelper;
import java.util.Iterator;
import java.util.LinkedList;
public class TapeAdapter extends BaseAdapter {
private static final String LOG_TAG = TapeAdapter.class.getName();
//private Context mContext;
private LinkedList<Picto> pictoLinkedList;
private boolean play = false;
public TapeAdapter() {
//mContext = c;
pictoLinkedList = new LinkedList<Picto>(); // the list begins empty
}
@Override
public int getCount() {
return pictoLinkedList.size();
}
public Picto getItem(int position) {
// este método debería devolver el objeto que esta en esa posición del
// adapter.
return pictoLinkedList.get(position);
}
public long getItemId(int position) {
// este método debería devolver el id de fila del item que esta en esa
// posición del adapter. No es necesario en este caso más que devolver 0.
return 0;
}
// AÑADIR ITEM AL ADAPTADOR
public int addItem(Picto p) {
pictoLinkedList.add(new Picto(p));
return pictoLinkedList.size()-1;
}
// ELIMINAR ITEM DEL ADAPTADOR
public void deleteItem(int position) {
try {
pictoLinkedList.remove(position);
}catch(IndexOutOfBoundsException e) {
Log.e(LOG_TAG,"Error deleting item from tape adapter:"+e.getMessage());
}
}
// ELIMINAR el último ITEM DEL ADAPTADOR
public Picto deleteLastView() {
Picto picto=null;
// Controlar excepcion al intentar eliminar el último cuando no hay elementos
try {
picto=pictoLinkedList.removeLast();
} catch (ArrayIndexOutOfBoundsException exception) {
Log.e("Excepción", "ArrayIndexOutOfBounds: " + exception.getMessage());
}
return picto;
}
// ELIMINAR TODOS LOS ITEMS DEL ADAPTADOR
public void endPlay() {
if (PCBcontext.getPcbdb().getCurrentUser().delivery()==User.JSON_STUDENT_ATTTRS.delivery.clean)
clear();
play = false;
}
public void clear() {
pictoLinkedList.clear();
notifyDataSetChanged();
}
// DEVUELVE TODOS LOS ELEMENTOS
public LinkedList<Picto> getAll() {
return pictoLinkedList;
}
// Devuelvo la cadena actual como un String
public String getAllAsString() {
String complete = "";
Iterator<Picto> iterator = pictoLinkedList.iterator();
while (iterator.hasNext()) {
Picto current = iterator.next();
complete += " " + current.get_translation();
}
return complete;
}
// DEVUELVE último elemento
public Picto getLastItem() {
return pictoLinkedList.getLast();
}
// Devuelve true o false si tiene o no elementos la lista de pictos
public boolean hasElements() {
return (pictoLinkedList.size() > 0);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View pictoView = PictoItemViewGenerator.getPictoView(
this.pictoLinkedList.get(position),
convertView,
parent, true);
return pictoView;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void ttsAllNew(TTSHelper tts) {
this.play = true;
String input = getAllAsString();
tts.play(input);
}
public boolean play() {
return this.play;
}
}
package com.yottacode.pictogram.supervisor.gui;
import android.content.Intent;
import android.view.MotionEvent;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.VOCA;
import com.yottacode.pictogram.tools.PCBcontext;
/**
* Created by Fernando on 07/10/2017.
*/
public class VOCAS extends VOCA {
float firstTouchX = -1;
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
int in = 0, out = 0;
Intent nextActivity = null;
Intent intent = getIntent();
if (PCBcontext.getPcbdb() != null && PCBcontext.getPcbdb().getCurrentUser().is_supervisor()) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
firstTouchX = event.getX();
break;
case MotionEvent.ACTION_UP:
if (event.getX() > firstTouchX + 150) { // izquierda a derecha
// No action
} else if (firstTouchX > event.getX() + 150) { //derecha a izquierda
// Pasa de voca a VocabularyManager
nextActivity = new Intent(this, VocabularyManager.class);
}
in = com.yottacode.pictogram.tabletlibrary.R.anim.leftin;
out = com.yottacode.pictogram.tabletlibrary.R.anim.leftout;
if (nextActivity != null) {
tape_delivered = false;
finish();
startActivity(nextActivity);
overridePendingTransition(in, out);
}
break;
}
}
return super.dispatchTouchEvent(event);
}
}
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper; package com.yottacode.pictogram.supervisor.gui.cropper;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
...@@ -16,14 +16,14 @@ import android.support.annotation.NonNull; ...@@ -16,14 +16,14 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.widget.ImageView;
import com.yottacode.pictogram.tabletlibrary.R; import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.Edge;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.handle.Handle; import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.handle.Handle;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util.AspectRatioUtil; import com.yottacode.pictogram.supervisor.gui.cropper.util.AspectRatioUtil;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util.HandleUtil; import com.yottacode.pictogram.supervisor.gui.cropper.util.PaintUtil;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util.PaintUtil; import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.Edge;
import com.yottacode.pictogram.supervisor.gui.cropper.util.HandleUtil;
/** /**
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper; package com.yottacode.pictogram.supervisor.gui.cropper;
import android.Manifest; import android.Manifest;
import android.app.Activity; import android.app.Activity;
...@@ -42,9 +42,9 @@ import android.widget.TextView; ...@@ -42,9 +42,9 @@ import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.yottacode.pictogram.dao.Picto; import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.tabletlibrary.R; import com.yottacode.pictogram.supervisor.gui.BotonCircular;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.BotonCircular; import com.yottacode.pictogram.supervisor.gui.PictoMenu;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.PictoMenu; import com.yottacode.pictogram.supervisor.R;
import com.yottacode.pictogram.tools.PCBcontext; import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.BitmapTools; import com.yottacode.tools.BitmapTools;
import com.yottacode.tools.GUITools; import com.yottacode.tools.GUITools;
...@@ -339,7 +339,7 @@ public class EditPictoActivity extends Activity { ...@@ -339,7 +339,7 @@ public class EditPictoActivity extends Activity {
//Para ver si la vista es para editar uno ya existente o para añadir uno nuevo //Para ver si la vista es para editar uno ya existente o para añadir uno nuevo
editar = getIntent().getBooleanExtra(PictoMenu.IS_EDIT,false); editar = getIntent().getBooleanExtra(PictoMenu.IS_EDIT,false);
titulo.setText(editar ? R.string.titleCropperEdit : R.string.titleCropperNew); titulo.setText(editar ? R.string.titleCropperEdit : R.string.titleCropperEdit);
//Obtener el picto a editar //Obtener el picto a editar
if(editar){ if(editar){
...@@ -545,7 +545,7 @@ public class EditPictoActivity extends Activity { ...@@ -545,7 +545,7 @@ public class EditPictoActivity extends Activity {
camara.setOnClickListener(new View.OnClickListener() { camara.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent,CAMERA_PIC_REQUEST); startActivityForResult(cameraIntent,CAMERA_PIC_REQUEST);
} }
}); });
......
...@@ -11,12 +11,12 @@ ...@@ -11,12 +11,12 @@
* governing permissions and limitations under the License. * governing permissions and limitations under the License.
*/ */
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge; package com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge;
import android.graphics.RectF; import android.graphics.RectF;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util.AspectRatioUtil; import com.yottacode.pictogram.supervisor.gui.cropper.util.AspectRatioUtil;
/** /**
* Enum representing an edge in the crop window. * Enum representing an edge in the crop window.
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge; package com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge;
/** /**
* Simple class to hold a pair of Edges. * Simple class to hold a pair of Edges.
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.handle; package com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.handle;
import android.graphics.RectF; import android.graphics.RectF;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.Edge; import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.Edge;
/** /**
* HandleHelper class to handle the center handle. * HandleHelper class to handle the center handle.
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.handle; package com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.handle;
import android.graphics.RectF; import android.graphics.RectF;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.Edge; import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.Edge;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.EdgePair; import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.EdgePair;
/** /**
* HandleHelper class to handle corner Handles (i.e. top-left, top-right, bottom-left, and * HandleHelper class to handle corner Handles (i.e. top-left, top-right, bottom-left, and
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.handle; package com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.handle;
import android.graphics.RectF; import android.graphics.RectF;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.Edge; import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.Edge;
/** /**
* Enum representing a pressable, draggable Handle on the crop window. * Enum representing a pressable, draggable Handle on the crop window.
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.handle; package com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.handle;
import android.graphics.RectF; import android.graphics.RectF;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.Edge; import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.Edge;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.EdgePair; import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.EdgePair;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util.AspectRatioUtil; import com.yottacode.pictogram.supervisor.gui.cropper.util.AspectRatioUtil;
/** /**
* Abstract helper class to handle operations on a crop window Handle. * Abstract helper class to handle operations on a crop window Handle.
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.handle; package com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.handle;
import android.graphics.RectF; import android.graphics.RectF;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.Edge; import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.Edge;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util.AspectRatioUtil; import com.yottacode.pictogram.supervisor.gui.cropper.util.AspectRatioUtil;
/** /**
* Handle helper class to handle horizontal handles (i.e. top and bottom handles). * Handle helper class to handle horizontal handles (i.e. top and bottom handles).
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.handle; package com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.handle;
import android.graphics.RectF; import android.graphics.RectF;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.Edge; import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.Edge;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util.AspectRatioUtil; import com.yottacode.pictogram.supervisor.gui.cropper.util.AspectRatioUtil;
/** /**
* HandleHelper class to handle vertical handles (i.e. left and right handles). * HandleHelper class to handle vertical handles (i.e. left and right handles).
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util; package com.yottacode.pictogram.supervisor.gui.cropper.util;
import android.graphics.RectF; import android.graphics.RectF;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util; package com.yottacode.pictogram.supervisor.gui.cropper.util;
import android.graphics.PointF; import android.graphics.PointF;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.handle.Handle; import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.handle.Handle;
/** /**
* Utility class to perform basic operations with Handles. * Utility class to perform basic operations with Handles.
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util; package com.yottacode.pictogram.supervisor.gui.cropper.util;
public class MathUtil { public class MathUtil {
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util; package com.yottacode.pictogram.supervisor.gui.cropper.util;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Paint; import android.graphics.Paint;
......
package com.yottacode.pictogram.tabletlibrary.gui.login; package com.yottacode.pictogram.supervisor.gui.login;
import android.app.Activity; import android.app.Activity;
import android.graphics.Bitmap; import android.graphics.Bitmap;
......
package com.yottacode.pictogram.tabletlibrary.gui.session; package com.yottacode.pictogram.supervisor.gui.session;
import android.app.Activity; import android.app.Activity;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.graphics.Color; import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
...@@ -15,9 +15,9 @@ import android.widget.AdapterView; ...@@ -15,9 +15,9 @@ import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.ListView; import android.widget.ListView;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.VOCA; import com.yottacode.pictogram.supervisor.gui.VOCAS;
import com.yottacode.pictogram.supervisor.R;
import com.yottacode.pictogram.tabletlibrary.net.SessionWrapper; import com.yottacode.pictogram.tabletlibrary.net.SessionWrapper;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tools.PCBcontext; import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.GUITools; import com.yottacode.tools.GUITools;
...@@ -118,7 +118,7 @@ public class ListInstructionsFragment extends Fragment{ ...@@ -118,7 +118,7 @@ public class ListInstructionsFragment extends Fragment{
void close() { void close() {
ListInstructionsFragment.this.getActivity().finish(); ListInstructionsFragment.this.getActivity().finish();
startActivity(new Intent(getActivity(), VOCA.class)); startActivity(new Intent(getActivity(), VOCAS.class));
} }
private void checkStudent() { private void checkStudent() {
SessionWrapper.validateStudent(new SessionWrapper.iValidateStudent() { SessionWrapper.validateStudent(new SessionWrapper.iValidateStudent() {
......
package com.yottacode.pictogram.tabletlibrary.gui.session; package com.yottacode.pictogram.supervisor.gui.session;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
...@@ -20,9 +20,9 @@ import android.widget.ToggleButton; ...@@ -20,9 +20,9 @@ import android.widget.ToggleButton;
import com.yottacode.pictogram.dao.User; import com.yottacode.pictogram.dao.User;
import com.yottacode.pictogram.net.NetService; import com.yottacode.pictogram.net.NetService;
import com.yottacode.pictogram.tabletlibrary.R; import com.yottacode.pictogram.supervisor.gui.VOCAS;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.VOCA; import com.yottacode.pictogram.supervisor.R;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.VocabularyManager; import com.yottacode.pictogram.supervisor.gui.VocabularyManager;
import com.yottacode.pictogram.tabletlibrary.net.SessionWrapper; import com.yottacode.pictogram.tabletlibrary.net.SessionWrapper;
import com.yottacode.pictogram.tools.PCBcontext; import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.GUITools; import com.yottacode.tools.GUITools;
...@@ -342,7 +342,7 @@ public class SessionActivity extends FragmentActivity implements ListInstruction ...@@ -342,7 +342,7 @@ public class SessionActivity extends FragmentActivity implements ListInstruction
void close() { void close() {
finish(); finish();
startActivity(new Intent(SessionActivity.this, VOCA.class)); startActivity(new Intent(SessionActivity.this, VOCAS.class));
} }
private void set_fragment(boolean isChecked, final ToggleButton onoffBtn) { private void set_fragment(boolean isChecked, final ToggleButton onoffBtn) {
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
android:layout_height="fill_parent" android:layout_height="fill_parent"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal" android:orientation="horizontal"
tools:context="com.yottacode.pictogram.tabletlibrary.gui.session.SessionActivity"> tools:context="com.yottacode.pictogram.supervisor.gui.session.SessionActivity">
<RelativeLayout <RelativeLayout
android:id="@+id/sessionTopbarLayout" android:id="@+id/sessionTopbarLayout"
......
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
android:layout_marginRight="25dp" android:layout_marginRight="25dp"
android:orientation="vertical"> android:orientation="vertical">
<com.yottacode.pictogram.tabletlibrary.gui.communicator.BotonCircular <com.yottacode.pictogram.supervisor.gui.BotonCircular
android:id="@+id/camara" android:id="@+id/camara"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="64dp" android:layout_height="64dp"
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
android:background="#00ffffff" android:background="#00ffffff"
android:src="@drawable/photo_camera" /> android:src="@drawable/photo_camera" />
<com.yottacode.pictogram.tabletlibrary.gui.communicator.BotonCircular <com.yottacode.pictogram.supervisor.gui.BotonCircular
android:id="@+id/galeria" android:id="@+id/galeria"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="64dp" android:layout_height="64dp"
...@@ -217,7 +217,7 @@ ...@@ -217,7 +217,7 @@
android:text="00:00 | 00:10" android:text="00:00 | 00:10"
android:textColor="@color/VerdeApp" /> android:textColor="@color/VerdeApp" />
<com.yottacode.pictogram.tabletlibrary.gui.communicator.BotonCircular <com.yottacode.pictogram.supervisor.gui.BotonCircular
android:id="@+id/botonGrabar" android:id="@+id/botonGrabar"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="64dp" android:layout_height="64dp"
...@@ -258,7 +258,7 @@ ...@@ -258,7 +258,7 @@
android:gravity="center" android:gravity="center"
android:orientation="horizontal"> android:orientation="horizontal">
<com.yottacode.pictogram.tabletlibrary.gui.communicator.BotonCircular <com.yottacode.pictogram.supervisor.gui.BotonCircular
android:id="@+id/reproducir" android:id="@+id/reproducir"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="48dp"
...@@ -289,7 +289,7 @@ ...@@ -289,7 +289,7 @@
</LinearLayout> </LinearLayout>
<com.yottacode.pictogram.tabletlibrary.gui.communicator.BotonCircular <com.yottacode.pictogram.supervisor.gui.BotonCircular
android:id="@+id/botonBorrar" android:id="@+id/botonBorrar"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="48dp"
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context="com.yottacode.pictogram.tabletlibrary.gui.session.SessionFragment" tools:context="com.yottacode.pictogram.supervisor.gui.session.SessionFragment"
android:orientation="vertical" > android:orientation="vertical" >
<ListView <ListView
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
android:keepScreenOn="true" android:keepScreenOn="true"
android:orientation="horizontal" android:orientation="horizontal"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
tools:context="com.yottacode.pictogram.tabletlibrary.gui.communicator.VocabularyManager"> tools:context="com.yottacode.pictogram.supervisor.gui.VocabularyManager">
<RelativeLayout <RelativeLayout
android:id="@+id/pictogramLayout" android:id="@+id/pictogramLayout"
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
android:keepScreenOn="true" android:keepScreenOn="true"
android:orientation="horizontal" android:orientation="horizontal"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
tools:context="com.yottacode.pictogram.tabletlibrary.gui.communicator.VocabularyManager"> tools:context="com.yottacode.pictogram.supervisor.gui.VocabularyManager">
<RelativeLayout <RelativeLayout
android:id="@+id/pictogramLayout" android:id="@+id/pictogramLayout"
......
...@@ -2,6 +2,54 @@ ...@@ -2,6 +2,54 @@
<resources> <resources>
<string name="app_name">Pictogram Supervisor</string> <string name="app_name">Pictogram Supervisor</string>
<string name="new_version_detail">Please, go to Google Play to download the new version </string> <string name="new_version_detail">Please, go to Google Play to download the new version </string>
https://play.google.com/store/apps/details?id=com.yottacode.supervisor_tablet <string name="login_ilegaluser">Please, login as supervisor or use Pictogram Communicator </string>
<!---session-->
<string name="session_method">Method</string>
<string name="session_instruction">Instruction</string>
<string name="session_header">Seleccion de método e instrucción</string>
<string name="session_error">Error de conexión</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>
<string name="session_notclosed">Last session was not closed. Please close from </string>
<string name="session_closed_ok">Session uploupload ok</string>
<string name="session_closed_fail">Session not uploaded. Please, try it from</string>
<string name="session_pause_error">Pause session failed</string>
<string name="session_noinet">No server conexion. Internet conexion is available?</string>
<string name="session_inetok">Server conexion ok</string>
<string name="session_log_startingsession">iniciando sesión</string>
<string name="session_log_startsession">sesión iniciada</string>
<string name="session_log_closingsession">cerrando sesión</string>
<string name="session_log_endingsession">finalizando sesión</string>
<string name="session_log_newtry">nuevo ensayo</string>
<string name="session_log_endtry">ensayo finalizado</string>
<string name="session_log_evaluatedtry">ensayo evaluado</string>
<string name="session_log_pausedtry">sesión en pausa</string>
<string name="session_log_continuedtry">sesión retomada</string>
<string name="session_eval_success">ok</string>
<string name="session_eval_fail">fail</string>
<string name="session_eval_spontaneous">spontaneous</string>
<string name="session_eval_supervised">supervised</string>
<string name="session_eval_guide">guided</string>
<string name="session_eval_model">modeled</string>
<string name="session_eval_notevuated">not evaluated</string>
<string name="session_eval_discarded">discarded</string>
<string name="crop">Crop</string>
<string name="cancel">Cancel</string>
<string name="legendText">Legend</string>
<!-- Cropper -->
<string name="crop_TextRequired">Por favor, introduzca una leyenda para el pictograma</string>
<string name="uploadingImage">Uploading image to server</string>
<string name="titleCropper">New pictogram</string>
<string name="titleCropperEdit">Edit Picto</string>
<string name="titleCropperNew">New Picto</string>
<string name="insertPasswordLogin">Insert Password</string>
<string name="version_label">Version:</string>
<string name="drawer_open">Open Menu</string>
<string name="drawer_close">Close Menu</string>
</resources> </resources>
...@@ -2,6 +2,53 @@ ...@@ -2,6 +2,53 @@
<resources> <resources>
<string name="app_name">Pictogram Supervisor</string> <string name="app_name">Pictogram Supervisor</string>
<string name="new_version_detail">Por favor, descargue la nueva versión en Google Play </string> <string name="new_version_detail">Por favor, descargue la nueva versión en Google Play </string>
<string name="login_ilegaluser">Utilice una cuenta de supervisor o bien ejecute Pictogram Communicator </string>
<!---session-->
<string name="session_method">Método</string>
<string name="session_instruction">Instrucción</string>
<string name="session_header">Seleccion de método e instrucción</string>
<string name="session_error">Error de conexión</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">Descargando 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>
<string name="session_notclosed">Este alumno tiene una sesión abierta. Por favor cierre la sesión desde Pictogram Web en</string>
<string name="session_closed_ok">Sesión grabada correctamente. Hora</string>
<string name="session_closed_fail">Sesión no cerrada. Por favor cierre la sesión en el panel de control de Pictogram Web</string>
<string name="session_pause_error">Error pausando la sesión</string>
<string name="session_noinet">Conexión a Internet necesaria para grabar sesiones. Por favor, asegúrese que tiene conexión</string>
<string name="session_inetok">Conexión con el servidor restablecida</string>
<string name="session_log_startingsession">iniciando sesión</string>
<string name="session_log_closingsession">cerrando sesión</string>
<string name="session_log_startsession">sesión iniciada</string>
<string name="session_log_endingsession">finalizando sesión</string>
<string name="session_log_newtry">nuevo ensayo</string>
<string name="session_log_endtry">ensayo finalizado</string>
<string name="session_log_evaluatedtry">ensayo evaluado</string>
<string name="session_log_pausedtry">sesión en pausa</string>
<string name="session_log_continuedtry">sesión retomada</string>
<string name="session_eval_success">correcto</string>
<string name="session_eval_fail">incorrecto</string>
<string name="session_eval_spontaneous">espontáneo</string>
<string name="session_eval_supervised">supervisado</string>
<string name="session_eval_guide">guiado</string>
<string name="session_eval_model">modelado</string>
<string name="session_eval_notevuated">no evaluado</string>
<string name="session_eval_discarded">inválido</string>
<string name="crop">Recortar</string>
<string name="crop_TextRequired">Por favor, introduzca una leyenda para el pictograma</string>
<!-- Cropper -->
<string name="legendText">Leyenda:</string>
<string name="uploadingImage">Subiendo imagen al servidor</string>
<string name="cancel">Cancelar</string>
<string name="titleCropperEdit">Editar Pictograma</string>
<string name="titleCropperNew">Nuevo Pictograma</string>
<string name="insertPasswordLogin">Inserte Contraseña</string>
<string name="version_label">Versión:</string>
<string name="drawer_open">Abrir Menu</string>
<string name="drawer_close">Cerrar Menu</string>
<string name="titleCropper">Nuevo Pictograma</string>
</resources> </resources>
...@@ -2,5 +2,53 @@ ...@@ -2,5 +2,53 @@
<resources> <resources>
<string name="app_name">Pictogram Supervisor</string> <string name="app_name">Pictogram Supervisor</string>
<string name="new_version_detail">Please, go to Google Play to download the new version </string> <string name="new_version_detail">Please, go to Google Play to download the new version </string>
<string name="login_ilegaluser">Utilice una cuenta de supervisor o bien ejecute Pictogram Communicator </string>
<!---session-->
<string name="session_method">Método</string>
<string name="session_instruction">Instrucción</string>
<string name="session_header">Select method and instruction</string>
<string name="session_error">Server Error </string>
<string name="session_noinstructions">Student without any instrucction assigment</string>
<string name="session_loading">Descargando 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>
<string name="session_notclosed">Este alumno tiene una sesión abierta. Por favor cierre la sesión en el panel de control de Pictogram Web</string>
<string name="session_closed_ok">Sesión grabada correctamente</string>
<string name="session_closed_fail">Sesión no cerrada. Por favor intente cerrarla desde</string>
<string name="session_pause_error">Error pausando la sesión</string>
<string name="session_noinet">Conexión a Internet necesaria para grabar sesiones. Por favor, asegúrese que tiene conexión</string>
<string name="session_inetok">Conexión con el servidor restablecida</string>
<string name="session_log_startingsession">iniciando sesión</string>
<string name="session_log_closingsession">cerrando sesión</string>
<string name="session_log_startsession">sesión iniciada</string>
<string name="session_log_endingsession">finalizando sesión</string>
<string name="session_log_newtry">nuevo ensayo</string>
<string name="session_log_endtry">ensayo finalizado</string>
<string name="session_log_evaluatedtry">ensayo evaluado</string>
<string name="session_log_pausedtry">sesión en pausa</string>
<string name="session_log_continuedtry">sesión retomada</string>
<string name="session_eval_success">correcto</string>
<string name="session_eval_fail">incorrecto</string>
<string name="session_eval_spontaneous">espontáneo</string>
<string name="session_eval_supervised">supervisado</string>
<string name="session_eval_guide">guiado</string>
<string name="session_eval_model">modelado</string>
<string name="session_eval_notevuated">no evaluado</string>
<string name="session_eval_discarded">inválido</string>
<!-- Cropper -->
<string name="legendText">Leyenda:</string>
<string name="titleCropper">New pictogram</string>
<string name="crop">Recortar</string>
<string name="titleCropperNew">Nuevo Pictograma</string>
<string name="titleCropperEdit">Editar Pictograma</string>
<string name="crop_TextRequired">Por favor, introduzca una leyenda para el pictograma</string>
<string name="uploadingImage">Subiendo imagen al servidor</string>
<string name="cancel">Cancel</string>
<string name="drawer_open">Open Menu</string>
<string name="drawer_close">Close Menu</string>
<string name="insertPasswordLogin">Inserte Contraseña</string>
<string name="version_label">Version:</string>
</resources> </resources>
...@@ -40,13 +40,6 @@ ...@@ -40,13 +40,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/PreFlavorDebug/java" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/PreFlavorDebug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/PreFlavorDebug/rs" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/PreFlavorDebug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/PreFlavorDebug/shaders" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/PreFlavorDebug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/PreFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/PreFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/PreFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/PreFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/PreFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/PreFlavor/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/PreFlavor/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testPreFlavorDebug/res" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/testPreFlavorDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testPreFlavorDebug/resources" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/testPreFlavorDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testPreFlavorDebug/assets" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/testPreFlavorDebug/assets" type="java-test-resource" />
...@@ -54,6 +47,13 @@ ...@@ -54,6 +47,13 @@
<sourceFolder url="file://$MODULE_DIR$/src/testPreFlavorDebug/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/testPreFlavorDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testPreFlavorDebug/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/testPreFlavorDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testPreFlavorDebug/shaders" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/testPreFlavorDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/PreFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/PreFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/PreFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/PreFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/PreFlavor/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/PreFlavor/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/PreFlavor/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/PreFlavor/res" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/PreFlavor/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/PreFlavor/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/PreFlavor/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/PreFlavor/assets" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/PreFlavor/assets" type="java-resource" />
...@@ -110,36 +110,53 @@ ...@@ -110,36 +110,53 @@
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<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/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/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-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/manifests" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<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/split-apk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
<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" />
<orderEntry type="library" exported="" name="support-v4-24.2.1" level="project" /> <orderEntry type="library" exported="" name="support-v4-24.2.1" level="project" />
<orderEntry type="library" exported="" name="support-compat-24.2.1" level="project" /> <orderEntry type="library" exported="" name="support-compat-24.2.1" level="project" />
<orderEntry type="library" exported="" name="support-media-compat-24.2.1" level="project" />
<orderEntry type="library" exported="" name="animated-vector-drawable-24.2.1" level="project" /> <orderEntry type="library" exported="" name="animated-vector-drawable-24.2.1" level="project" />
<orderEntry type="library" exported="" name="constraint-layout-1.0.0-beta3" level="project" />
<orderEntry type="library" exported="" name="support-fragment-24.2.1" level="project" /> <orderEntry type="library" exported="" name="support-fragment-24.2.1" level="project" />
<orderEntry type="library" exported="" name="play-services-base-9.2.1" level="project" />
<orderEntry type="library" exported="" name="play-services-clearcut-9.2.1" level="project" />
<orderEntry type="library" exported="" name="android-gif-drawable-1.1.7" level="project" />
<orderEntry type="library" exported="" name="support-media-compat-24.2.1" level="project" />
<orderEntry type="library" exported="" name="play-services-gcm-9.2.1" level="project" /> <orderEntry type="library" exported="" name="play-services-gcm-9.2.1" level="project" />
<orderEntry type="library" exported="" name="play-services-auth-base-9.2.1" level="project" /> <orderEntry type="library" exported="" name="play-services-auth-base-9.2.1" level="project" />
<orderEntry type="library" exported="" name="support-core-ui-24.2.1" level="project" /> <orderEntry type="library" exported="" name="support-core-ui-24.2.1" level="project" />
<orderEntry type="library" exported="" name="play-services-base-9.2.1" level="project" />
<orderEntry type="library" exported="" name="play-services-gass-9.2.1" level="project" /> <orderEntry type="library" exported="" name="play-services-gass-9.2.1" level="project" />
<orderEntry type="library" exported="" name="play-services-iid-9.2.1" level="project" /> <orderEntry type="library" exported="" name="play-services-iid-9.2.1" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-24.2.1" level="project" /> <orderEntry type="library" exported="" name="appcompat-v7-24.2.1" level="project" />
<orderEntry type="library" exported="" name="support-vector-drawable-24.2.1" level="project" /> <orderEntry type="library" exported="" name="support-vector-drawable-24.2.1" level="project" />
<orderEntry type="library" exported="" name="support-core-utils-24.2.1" level="project" /> <orderEntry type="library" exported="" name="support-core-utils-24.2.1" level="project" />
<orderEntry type="library" exported="" name="play-services-clearcut-9.2.1" level="project" />
<orderEntry type="library" exported="" name="play-services-basement-9.2.1" level="project" /> <orderEntry type="library" exported="" name="play-services-basement-9.2.1" level="project" />
<orderEntry type="library" exported="" name="play-services-tasks-9.2.1" level="project" /> <orderEntry type="library" exported="" name="play-services-tasks-9.2.1" level="project" />
<orderEntry type="library" exported="" name="support-annotations-24.2.1" level="project" /> <orderEntry type="library" exported="" name="support-annotations-24.2.1" level="project" />
<orderEntry type="library" exported="" name="androidasync-2.2.1" level="project" /> <orderEntry type="library" exported="" name="androidasync-2.2.1" level="project" />
<orderEntry type="library" exported="" name="android-gif-drawable-1.1.7" level="project" />
<orderEntry type="library" exported="" name="play-services-auth-9.2.1" level="project" /> <orderEntry type="library" exported="" name="play-services-auth-9.2.1" level="project" />
<orderEntry type="library" exported="" name="ion-2.2.1" level="project" /> <orderEntry type="library" exported="" name="ion-2.2.1" level="project" />
<orderEntry type="library" exported="" name="play-services-ads-9.2.1" level="project" /> <orderEntry type="library" exported="" name="play-services-ads-9.2.1" level="project" />
...@@ -156,5 +173,6 @@ ...@@ -156,5 +173,6 @@
<orderEntry type="library" exported="" scope="TEST" name="hamcrest-core-1.3" level="project" /> <orderEntry type="library" exported="" scope="TEST" name="hamcrest-core-1.3" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="junit-4.12" level="project" /> <orderEntry type="library" exported="" scope="TEST" name="junit-4.12" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="json-20090211" level="project" /> <orderEntry type="library" exported="" scope="TEST" name="json-20090211" level="project" />
<orderEntry type="library" exported="" name="constraint-layout-solver-1.0.0-beta3" level="project" />
</component> </component>
</module> </module>
\ No newline at end of file
...@@ -13,6 +13,7 @@ android { ...@@ -13,6 +13,7 @@ android {
resValue "integer", "columns", "10" resValue "integer", "columns", "10"
resValue "integer", "rows_big", "4" resValue "integer", "rows_big", "4"
resValue "integer", "columns_big", "8" resValue "integer", "columns_big", "8"
} }
buildTypes { buildTypes {
release { release {
...@@ -32,4 +33,5 @@ dependencies { ...@@ -32,4 +33,5 @@ dependencies {
compile 'com.android.support:appcompat-v7:24.2.1' compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:support-v4:24.2.1' compile 'com.android.support:support-v4:24.2.1'
compile 'pl.droidsonroids.gif:android-gif-drawable:1.1.+' compile 'pl.droidsonroids.gif:android-gif-drawable:1.1.+'
compile 'com.android.support.constraint:constraint-layout:1.0.0-beta3'
} }
<?xml version="1.0" encoding="utf-8"?>
<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">
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<application <application
android:allowBackup="true" android:allowBackup="true"
android:label="@string/app_name" android:label="@string/app_name"
android:supportsRtl="true"> android:supportsRtl="true">
<activity android:name=".gui.communicator.EmptySceneActivity"></activity>
</application> </application>
</manifest> </manifest>
package com.yottacode.pictogram.tabletlibrary.gui.communicator;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tools.PCBcontext;
public class EmptySceneActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_empty_scene);
this.findViewById(R.id.btn_empty_vocabulary).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PCBcontext.getNetService().restart_app(true);
}
});
}
}
...@@ -4,7 +4,6 @@ import android.app.Activity; ...@@ -4,7 +4,6 @@ import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
...@@ -18,7 +17,6 @@ import android.widget.EditText; ...@@ -18,7 +17,6 @@ import android.widget.EditText;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import com.yottacode.pictogram.dao.Device; import com.yottacode.pictogram.dao.Device;
import com.yottacode.pictogram.dao.User; import com.yottacode.pictogram.dao.User;
...@@ -27,7 +25,6 @@ import com.yottacode.pictogram.tabletlibrary.R; ...@@ -27,7 +25,6 @@ import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.VOCA; import com.yottacode.pictogram.tabletlibrary.gui.communicator.VOCA;
import com.yottacode.pictogram.tabletlibrary.net.NetServiceTablet; import com.yottacode.pictogram.tabletlibrary.net.NetServiceTablet;
import com.yottacode.pictogram.tools.PCBcontext; import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.GUITools;
import org.json.JSONException; import org.json.JSONException;
...@@ -45,8 +42,8 @@ public class SerialActivity extends Activity { ...@@ -45,8 +42,8 @@ public class SerialActivity extends Activity {
EditText mSerialViewMail; EditText mSerialViewMail;
EditText mSerialViewPass; EditText mSerialViewPass;
LinearLayout stuList; LinearLayout userList;
LinearLayout supList;
/** /**
* Return the default user+pwd when login.The policy is * Return the default user+pwd when login.The policy is
...@@ -67,76 +64,34 @@ public class SerialActivity extends Activity { ...@@ -67,76 +64,34 @@ public class SerialActivity extends Activity {
return new String[]{username,password}; return new String[]{username,password};
} }
private void createListSup(Vector<User> users){
final Vector<User> supUsers = new Vector<>();
Vector<Integer> idUsers=new Vector<>();
//Rellenar la lista con solo usuarios supervisor
if(!users.isEmpty()){
for(User user: users){
if(user.is_supervisor() && !idUsers.contains(user.get_id_sup())) {
supUsers.add(user);
idUsers.add(user.get_id_sup());
}
}
}
if(!supUsers.isEmpty()){
CustomListLogin adapterSup = new CustomListLogin(this,supUsers);
ListView listaSup = (ListView) findViewById(R.id.supList);
listaSup.setAdapter(adapterSup);
listaSup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (supUsers.elementAt(position).get_pwd_sup().equals("_")) {
mSerialViewMail.setText(supUsers.elementAt(position).get_email_sup());
mSerialViewPass.setText("");
mSerialViewPass.requestFocus();
Toast toast = Toast.makeText(PCBcontext.getContext(), R.string.insertPasswordLogin, Toast.LENGTH_SHORT);
toast.show();
} else {
SharedPreferences settings = getSharedPreferences(Device.PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("username", supUsers.elementAt(position).get_email_sup());
editor.putString("password", supUsers.elementAt(position).get_pwd_sup());
editor.commit();
new UserLogin().login(supUsers.elementAt(position).get_email_sup(),
supUsers.elementAt(position).get_pwd_sup(), SerialActivity.this, VOCA.class, LoginActivity.class);
}
}
});
}
}
private void createListStu(Vector<User> users){ private void createUserList(Vector<User> vusers){
final Vector<User> stuUsers = new Vector<>(); final Vector<User> users = new Vector<>();
Vector<Integer> idUsers=new Vector<>(); Vector<Integer> idUsers=new Vector<>();
//Rellenar la lista con solo usuarios supervisor //Rellenar la lista con solo usuarios supervisor
if(!users.isEmpty()){ if(!vusers.isEmpty())
for(User user: users){ for(User user: vusers){
if(!user.is_supervisor()) { users.add(user);
stuUsers.add(user); idUsers.add(user.is_supervisor() ? user.get_id_sup() : user.get_id_stu());
idUsers.add(user.get_id_stu());
} }
}
}
if(!stuUsers.isEmpty()){
CustomListLogin adapterStu = new CustomListLogin(this,stuUsers); if(!users.isEmpty()){
ListView listaStu = (ListView) findViewById(R.id.stuList); CustomListLogin adapterUser = new CustomListLogin(this,users);
listaStu.setAdapter(adapterStu); ListView listUsers = (ListView) findViewById(R.id.userList);
listaStu.setOnItemClickListener(new AdapterView.OnItemClickListener() { listUsers.setAdapter(adapterUser);
listUsers.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
SharedPreferences settings = getSharedPreferences(Device.PREFS_NAME, 0); SharedPreferences settings = getSharedPreferences(Device.PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit(); SharedPreferences.Editor editor = settings.edit();
editor.putString("username", stuUsers.elementAt(position).get_nickname_stu()); editor.putString("username", users.elementAt(position).get_nickname_stu());
editor.putString("password", stuUsers.elementAt(position).get_pwd_stu()); editor.putString("password", users.elementAt(position).get_pwd_stu());
editor.commit(); editor.commit();
new UserLogin().login(stuUsers.elementAt(position).get_nickname_stu(), new UserLogin().login(users.elementAt(position).get_nickname_stu(),
stuUsers.elementAt(position).get_pwd_stu(),SerialActivity.this, VOCA.class, LoginActivity.class); users.elementAt(position).get_pwd_stu(),SerialActivity.this, VOCA.class, LoginActivity.class);
} }
}); });
} }
...@@ -158,8 +113,8 @@ public class SerialActivity extends Activity { ...@@ -158,8 +113,8 @@ public class SerialActivity extends Activity {
mSerialViewMail = (EditText) findViewById(R.id.serialmail); mSerialViewMail = (EditText) findViewById(R.id.serialmail);
mSerialViewPass = (EditText) findViewById(R.id.serialpass); mSerialViewPass = (EditText) findViewById(R.id.serialpass);
stuList = (LinearLayout) findViewById(R.id.stuLay); userList = (LinearLayout) findViewById(R.id.supstulist);
supList = (LinearLayout) findViewById(R.id.supLay);
Button mEntrarButton = (Button) findViewById(R.id.entrar_button); Button mEntrarButton = (Button) findViewById(R.id.entrar_button);
mEntrarButton.setOnClickListener(new OnClickListener() { mEntrarButton.setOnClickListener(new OnClickListener() {
...@@ -201,8 +156,7 @@ public class SerialActivity extends Activity { ...@@ -201,8 +156,7 @@ public class SerialActivity extends Activity {
super.onStart(); super.onStart();
try { try {
users = PCBcontext.getDevice().getUsers(); users = PCBcontext.getDevice().getUsers();
createListSup(users); createUserList(users);
createListStu(users);
if (username.equals("") && users.size()==0) { if (username.equals("") && users.size()==0) {
((TextView) findViewById(R.id.txt_firstlogin)).append('\n' + getString(R.string.login_web)); ((TextView) findViewById(R.id.txt_firstlogin)).append('\n' + getString(R.string.login_web));
findViewById(R.id.firstlogin).setVisibility(View.VISIBLE); findViewById(R.id.firstlogin).setVisibility(View.VISIBLE);
......
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.Log;
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.ListView;
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 {
private String LOG_TAG=PictoAdapter.class.getCanonicalName();
public void setCurrentMsg(int currentMsg) {
this.currentMsg = currentMsg;
}
public static class Item {
Bitmap img;
String secs;
String sentence="";
public Item(Bitmap img, String secs) {
this.img=img;
this.secs=secs;
}
Bitmap getImg() {
return img;
}
String getTime() {
return secs;
}
public String getMsg() { return sentence.toString();}
public void setImg(Bitmap currmsg, String word, boolean eval) {
this.img=currmsg;
if (eval) sentence+=":";
sentence+=" "+word;
}
}
Context context;
Vector<Item> msg;
private 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);
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);
((ListView)parent).smoothScrollToPosition(position);
}else
vi.setBackgroundColor(Color.TRANSPARENT);
return vi;
}
public void addItem(Bitmap bmp,String text) {
Item item=this.msg.get(this.msg.size()-1);
Bitmap oldmsg=item.getImg();
bmp=set_text(context,bmp,getTimeDiff(new Date().getTime()));
Bitmap currmsg=combineImages(oldmsg,bmp);
item.setImg(currmsg,text,false);
}
public void evaluateItem(Bitmap bmp, String evaluation, int position) {
Item item = this.msg.get(position);
Bitmap oldmsg = item.getImg();
float width = context.getResources().getDimension(R.dimen.picto_session_width);
float height = context.getResources().getDimension(R.dimen.picto_session_height);
bmp = new BitmapTools(bmp).resize((int)width ,(int)height).get();
bmp = set_text(context,bmp,getTimeDiff(new Date().getTime()));
Bitmap currmsg = position>=this.msg.size()-1 ? combineImages(oldmsg,bmp) : updateImage(oldmsg,bmp);
item.setImg(currmsg,evaluation,true);
}
public int newMsg() {
if ((msg.size()>0 && msg.get(msg.size()-1).getImg().getWidth()>context.getResources().getDimension(R.dimen.picto_session_width)) || msg.size()==0)
{
Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
calendar.setTime(new Date()); // assigns calendar to given date
String time = calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE) + ":" + calendar.get(Calendar.SECOND);
Bitmap bmp = set_trycount(context,this.msg.size()+1);
this.currentMsg = this.msg.size();
msg.add(new Item(bmp, time));
}
return msg.size()-1;
}
private Bitmap combineImages(Bitmap c, Bitmap s) {
Bitmap cs = null;
int width, height = 0;
width = c.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;
}
private Bitmap updateImage(Bitmap c, Bitmap s) {
Bitmap cs = null;
int width= c.getWidth(), height= c.getHeight();
int cutwidth=c.getWidth()-s.getWidth();
cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas comboImage = new Canvas(cs);
comboImage.drawBitmap(Bitmap.createBitmap(c,0,0,cutwidth,height), 0f, 0f, null);
comboImage.drawBitmap(s, cutwidth, 0f, null);
return cs;
}
static void set_date(Context context, Canvas canvas,String time) {
TextView textView2 = new TextView(context);
textView2.layout(0, 20, 100, 100);
textView2.setPadding(0, 0, 0, 0);
textView2.setTextSize(TypedValue.COMPLEX_UNIT_PX, 13);
textView2.setTextColor(Color.BLACK);
textView2.setBackgroundColor(Color.LTGRAY);
textView2.setWidth(100);
textView2.setGravity(Gravity.CENTER_HORIZONTAL);
textView2.setMaxLines(1);
textView2.setText(time);
textView2.setDrawingCacheEnabled(true);
canvas.drawBitmap(textView2.getDrawingCache(), 0, 60, null);
}
static Bitmap set_trycount(Context context,int pos) {
Bitmap param_bitmap = BitmapFactory.decodeResource(context.getResources(),
R.drawable.try_border);
float width = context.getResources().getDimension(R.dimen.picto_session_width);
float height = context.getResources().getDimension(R.dimen.picto_session_height);
Bitmap bmp =Bitmap.createScaledBitmap(param_bitmap, (int)width, (int)height, false);
Canvas canvas = new Canvas(bmp);
TextView textView = new TextView(context);
String texto=(pos<10 ? "0" :"")+new Integer(pos).toString();
textView.layout(0, 0, 100, 100);
textView.setPadding(0, 0, 0, 0);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 40);
textView.setTextColor(Color.BLACK);
textView.setBackgroundColor(Color.TRANSPARENT);
textView.setWidth(100);
textView.setGravity(Gravity.LEFT);
textView.setMaxLines(1);
textView.setText(texto);
textView.setDrawingCacheEnabled(true);
canvas.drawBitmap(textView.getDrawingCache(), 10, 10, null);
Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
calendar.setTime(new Date()); // assigns calendar to given date
String time= calendar.get(Calendar.HOUR_OF_DAY)+":"+calendar.get(Calendar.MINUTE)+":"+calendar.get(Calendar.SECOND);
set_date(context,canvas,time);
return bmp;
}
static Bitmap set_text(Context context,Bitmap param_bitmap,String texto) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
float width = param_bitmap.getWidth();
float height=param_bitmap.getHeight();
android.graphics.Bitmap.Config bitmapConfig = param_bitmap.getConfig();
if (bitmapConfig == null) {
bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
}
Bitmap bitmap = param_bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(bitmap);
Bitmap bm = Bitmap.createScaledBitmap(bitmap, (int)Math.round(0.8*width), (int)Math.round(0.8*height), false);
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); //Poner en blanco el bitmap original para dibujar encima
canvas.drawBitmap(bm, 0, 0, paint);
set_date(context,canvas,texto);
return bitmap;
}
public int getCurrentPosition() {
return currentMsg;
}
public String getCurrentMsgText() {
return this.getItem(currentMsg).getMsg();
}
public String getMsgText(int pos) {
return this.getItem(pos).getMsg();
}
}
package com.yottacode.pictogram.tabletlibrary.gui.session;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
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.dao.Picto;
import com.yottacode.pictogram.net.websockets.ActionTalk;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.BitmapTools;
import org.json.JSONObject;
import java.io.IOException;
public class SessionFragment extends Fragment implements ActionTalk.iActionListener {
interface iSessionFragment {
public void selectedMsg(int msg_pos);
public void play_msg();
}
private iSessionFragment mListener=null;
ListView list_pictomsg;
PictoAdapter adapter_pictomsg;
private boolean paused=false;
public SessionFragment() {
super();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter_pictomsg=new PictoAdapter(this.getContext());
setRetainInstance(true);
}
@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);
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);
mListener.selectedMsg(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 iSessionFragment ) {
mListener = (iSessionFragment) 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 iSessionFragment ) {
mListener = (iSessionFragment) context;
PCBcontext.getVocabulary().addActionTalkListener(this);
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
PCBcontext.getVocabulary().removeActionTalkListener(this);
}
@Override
public void action(action action, int picto_cat, int picto_id,JSONObject msg) {
if (action==ActionTalk.iActionListener.action.show) {
if (!paused) {
mListener.play_msg();
}
} else if (action==ActionTalk.iActionListener.action.add
|| action==ActionTalk.iActionListener.action.select
|| action==ActionTalk.iActionListener.action.delete) try {
Picto picto=PCBcontext.getVocabulary().get_picto(picto_cat,picto_id);
Bitmap bmp=picto.get_bitmap(getContext());
if (action==ActionTalk.iActionListener.action.delete) {
bmp = bmp.copy(bmp.getConfig(), true);
new BitmapTools(bmp).paint((BitmapDrawable)getActivity().getResources().getDrawable(R.drawable.disabled_picto,null),1);
} else if (PCBcontext.getVocabulary().get_picto(picto_cat,picto_id).is_category()) {
bmp = bmp.copy(bmp.getConfig(), true);
new BitmapTools(bmp).paint((BitmapDrawable)getActivity().getResources().getDrawable(R.drawable.session_category,null),0.5);
}
if (paused) {
bmp=bmp.copy(bmp.getConfig(),true);
new BitmapTools(bmp).paintPause();
}
this.adapter_pictomsg.addItem(bmp,picto.get_translation());
getActivity().runOnUiThread(new Runnable() {
public void run() {
adapter_pictomsg.notifyDataSetChanged();
}});
} catch (IOException e) {
e.printStackTrace();
}
}
public int newMsg() {
int newmsg_position=this.adapter_pictomsg.newMsg();
getActivity().runOnUiThread(new Runnable() {
public void run() {
adapter_pictomsg.notifyDataSetChanged();
}});
return newmsg_position;
}
public void evaluateMsg(Bitmap bmp, String evaluation,int position) {
this.adapter_pictomsg.evaluateItem(bmp, evaluation,position);
getActivity().runOnUiThread(new Runnable() {
public void run() {
adapter_pictomsg.notifyDataSetChanged();
}});
}
public void paused(boolean isChecked) {
this.paused=isChecked;
}
public int get_current_msg_pos() {
return this.adapter_pictomsg.getCurrentPosition();
}
public String get_current_msg_text() {
return this.adapter_pictomsg.getCurrentMsgText();
}
public int get_last_msg_pos() {
return adapter_pictomsg.getCount()-1;
}
public String get_msg_text(int pos) {
return adapter_pictomsg.getMsgText(pos);
}
}
...@@ -31,15 +31,17 @@ public class NetServiceTablet implements NetService.iNetServiceDevice { ...@@ -31,15 +31,17 @@ public class NetServiceTablet implements NetService.iNetServiceDevice {
public void build() { public void build() {
this.builder = new NotificationCompat.Builder(PCBcontext.getContext()).setAutoCancel(true).setOngoing(PCBcontext.getContext().getResources().getBoolean(R.bool.NotifyAllwaysVisible)); this.builder = new NotificationCompat.Builder(PCBcontext.getContext()).setAutoCancel(true).setOngoing(PCBcontext.getContext().getResources().getBoolean(R.bool.NotifyAllwaysVisible));
Intent resultIntent = new Intent(PCBcontext.getContext(), VOCA.class); if (this.VOCA!=null) {
TaskStackBuilder stackBuilder = TaskStackBuilder.create(PCBcontext.getContext()); Intent resultIntent = new Intent(PCBcontext.getContext(), this.VOCA.getClass());
stackBuilder.addParentStack(VOCA.class); TaskStackBuilder stackBuilder = TaskStackBuilder.create(PCBcontext.getContext());
stackBuilder.addNextIntent(resultIntent); stackBuilder.addParentStack(this.VOCA.getClass());
if (PCBcontext.getContext().getResources().getBoolean(R.bool.NotifyAllwaysVisible)){ stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = if (PCBcontext.getContext().getResources().getBoolean(R.bool.NotifyAllwaysVisible)) {
stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent resultPendingIntent =
builder.setContentIntent(resultPendingIntent); stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
} builder.setContentIntent(resultPendingIntent);
}
}
} }
public void notifyStatus(boolean updated) { public void notifyStatus(boolean updated) {
......
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:background="#BDBDBD"
android:keepScreenOn="true"
android:orientation="horizontal"
android:theme="@style/Theme.AppCompat"
tools:context="com.yottacode.pictogram.tabletlibrary.gui.communicator.EmptySceneActivity">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/logo"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/pictogram_logo" />
</LinearLayout>
<LinearLayout
android:layout_width="570dp"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
>
<LinearLayout
android:id="@+id/loginlayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="horizontal"
android:paddingTop="20dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/emptyVocabulary_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/emptyVocabulary_msg"
android:textAppearance="@android:style/TextAppearance.Material.Large"
android:background="@color/VerdeApp"
android:textColor="@color/white"
tools:layout_editor_absoluteX="33dp"
tools:layout_editor_absoluteY="75dp" />
<Button
android:id="@+id/btn_empty_vocabulary"
style="?android:textAppearanceSmall"
android:layout_width="128dp"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/emptyVocabulary_txt"
android:layout_alignStart="@+id/emptyVocabulary_txt"
android:layout_below="@+id/emptyVocabulary_txt"
android:layout_gravity="right"
android:layout_marginTop="25dp"
android:background="@color/VerdeApp"
android:text="@string/action_entrar"
android:textColor="@color/white"
android:textStyle="bold" />
</LinearLayout>
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="end"
android:layout_marginStart="30px"
android:elevation="1dp"
android:orientation="horizontal"
android:src="@drawable/login_image" />
</LinearLayout>
</LinearLayout>
</FrameLayout>
...@@ -72,13 +72,6 @@ ...@@ -72,13 +72,6 @@
android:background="#eeeeee" android:background="#eeeeee"
android:paddingTop="10dp"> android:paddingTop="10dp">
<fragment
android:id="@+id/loginStudentGrid"
class="com.yottacode.pictogram.tabletlibrary.gui.login.StudentFragmentGrid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
tools:layout="@layout/fragment_new_student" />
</FrameLayout> </FrameLayout>
......
...@@ -126,39 +126,29 @@ ...@@ -126,39 +126,29 @@
android:textAlignment="center" android:textAlignment="center"
android:textColor="@color/BlancoApp" android:textColor="@color/BlancoApp"
android:textSize="18sp" android:textSize="18sp"
tools:text="Alumnos" /> />
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:orientation="horizontal" android:orientation="vertical"
android:id="@+id/supstulist"> android:id="@+id/supstulist">
<LinearLayout
android:id="@+id/stuLay"
android:layout_width="285dp"
android:layout_height="match_parent"
android:layout_alignStart="@id/entrar_button"
android:layout_below="@+id/loginseparator"
android:layout_weight="10.48"
android:background="@color/common_plus_signin_btn_text_dark_pressed"
android:orientation="vertical"
android:visibility="visible">
<TextView <TextView
android:id="@+id/labelStu" android:id="@+id/labelUser"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/VerdeApp" android:background="@color/VerdeApp"
android:text="@string/alumnos"
android:textAlignment="center" android:textAlignment="center"
android:textColor="@color/BlancoApp" android:textColor="@color/BlancoApp"
android:textSize="18sp" android:textSize="18sp"
tools:text="Alumnos" /> tools:text="" />
<ListView <ListView
android:id="@+id/stuList" android:id="@+id/userList"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:divider="@color/common_plus_signin_btn_text_light_disabled" android:divider="@color/common_plus_signin_btn_text_light_disabled"
...@@ -169,42 +159,8 @@ ...@@ -169,42 +159,8 @@
</LinearLayout> </LinearLayout>
<LinearLayout
android:id="@+id/supLay"
android:layout_width="285dp"
android:layout_height="match_parent"
android:layout_alignTop="@id/stuLay"
android:layout_marginStart="10dp"
android:layout_toEndOf="@id/stuLay"
android:background="@color/common_plus_signin_btn_text_dark_pressed"
android:gravity="right"
android:orientation="vertical"
android:visibility="visible">
<TextView
android:id="@+id/labelSup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/VerdeApp"
android:text="@string/supervisores"
android:textAlignment="center"
android:textColor="@color/BlancoApp"
android:textSize="18sp"
android:fastScrollEnabled="true"
android:isScrollContainer="true"
tools:text="Supervisores" />
<ListView
android:id="@+id/supList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@color/common_plus_signin_btn_text_light_disabled"
android:dividerHeight="1dp"
android:paddingBottom="@dimen/small_padding" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout>
</FrameLayout> </FrameLayout>
......
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#eeeeee" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#eeeeee" />
</LinearLayout>
...@@ -41,8 +41,8 @@ ...@@ -41,8 +41,8 @@
<ImageButton <ImageButton
android:id="@+id/button_tts" android:id="@+id/button_tts"
android:layout_width="@dimen/tape_normal_height" android:layout_width="@dimen/tape_big_height"
android:layout_height="@dimen/tape_normal_height" android:layout_height="@dimen/tape_big_height"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:adjustViewBounds="true" android:adjustViewBounds="true"
...@@ -50,6 +50,7 @@ ...@@ -50,6 +50,7 @@
android:clickable="true" android:clickable="true"
android:paddingLeft="16dp" android:paddingLeft="16dp"
android:paddingRight="16dp" android:paddingRight="16dp"
android:scaleType="fitCenter"
android:src="@drawable/send_tape" /> android:src="@drawable/send_tape" />
<ImageButton <ImageButton
......
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
android:id="@+id/button_tts" android:id="@+id/button_tts"
android:layout_width="@dimen/tape_big_height" android:layout_width="@dimen/tape_big_height"
android:layout_height="@dimen/tape_big_height" android:layout_height="@dimen/tape_big_height"
android:scaleType="fitCenter"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:adjustViewBounds="true" android:adjustViewBounds="true"
......
<resources> <resources>
<string name="app_name">com.yottacode.pictogram.Tablet</string> <string name="app_name">com.yottacode.pictogram.Tablet</string>
<string name="alumnos">Students</string>
<string name="supervisores">Supervisors</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_method">Method</string>
<string name="session_instruction">Instruction</string>
<string name="session_header">Seleccion de método e instrucción</string>
<string name="session_error">Error de conexión</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>
<string name="session_notclosed">Last session was not closed. Please close from </string>
<string name="session_closed_ok">Session uploupload ok</string>
<string name="session_closed_fail">Session not uploaded. Please, try it from</string>
<string name="session_pause_error">Pause session failed</string>
<string name="session_noinet">No server conexion. Internet conexion is available?</string>
<string name="session_inetok">Server conexion ok</string>
<string name="session_log_startingsession">iniciando sesión</string>
<string name="session_log_startsession">sesión iniciada</string>
<string name="session_log_closingsession">cerrando sesión</string>
<string name="session_log_endingsession">finalizando sesión</string>
<string name="session_log_newtry">nuevo ensayo</string>
<string name="session_log_endtry">ensayo finalizado</string>
<string name="session_log_evaluatedtry">ensayo evaluado</string>
<string name="session_log_pausedtry">sesión en pausa</string>
<string name="session_log_continuedtry">sesión retomada</string>
<string name="session_eval_success">ok</string>
<string name="session_eval_fail">fail</string>
<string name="session_eval_spontaneous">spontaneous</string>
<string name="session_eval_supervised">supervised</string>
<string name="session_eval_guide">guided</string>
<string name="session_eval_model">modeled</string>
<string name="session_eval_notevuated">not evaluated</string>
<string name="session_eval_discarded">discarded</string>
<string name="crop">Crop</string>
<string name="cancel">Cancel</string>
<string name="legendText">Legend</string>
<!-- Cropper -->
<string name="crop_TextRequired">Por favor, introduzca una leyenda para el pictograma</string>
<string name="uploadingImage">Uploading image to server</string>
<string name="titleCropper">New pictogram</string>
<string name="titleCropperEdit">Edit Picto</string>
<string name="titleCropperNew">New Picto</string>
<string name="insertPasswordLogin">Insert Password</string>
<string name="version_label">Version:</string> <string name="version_label">Version:</string>
<string name="message_from">Message from</string> <string name="emptyVocabulary_msg">¡Tablero sin ningún pictograma visible! Visite Pictogram Web o use Pictogram Supervisor para añadir pictogramas</string>
<string name="says">Says</string>
<string name="drawer_open">Open Menu</string>
<string name="drawer_close">Close Menu</string>
</resources> </resources>
<resources> <resources>
<string name="app_name">com.yottacode.pictogram.Tablet</string> <string name="app_name">com.yottacode.pictogram.Tablet</string>
<string name="alumnos">Alumnos</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_method">Método</string>
<string name="session_instruction">Instrucción</string>
<string name="session_header">Seleccion de método e instrucción</string>
<string name="session_error">Error de conexión</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">Descargando 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>
<string name="session_notclosed">Este alumno tiene una sesión abierta. Por favor cierre la sesión desde Pictogram Web en</string>
<string name="session_closed_ok">Sesión grabada correctamente. Hora</string>
<string name="session_closed_fail">Sesión no cerrada. Por favor cierre la sesión en el panel de control de Pictogram Web</string>
<string name="session_pause_error">Error pausando la sesión</string>
<string name="session_noinet">Conexión a Internet necesaria para grabar sesiones. Por favor, asegúrese que tiene conexión</string>
<string name="session_inetok">Conexión con el servidor restablecida</string>
<string name="session_log_startingsession">iniciando sesión</string>
<string name="session_log_closingsession">cerrando sesión</string>
<string name="session_log_startsession">sesión iniciada</string>
<string name="session_log_endingsession">finalizando sesión</string>
<string name="session_log_newtry">nuevo ensayo</string>
<string name="session_log_endtry">ensayo finalizado</string>
<string name="session_log_evaluatedtry">ensayo evaluado</string>
<string name="session_log_pausedtry">sesión en pausa</string>
<string name="session_log_continuedtry">sesión retomada</string>
<string name="session_eval_success">correcto</string>
<string name="session_eval_fail">incorrecto</string>
<string name="session_eval_spontaneous">espontáneo</string>
<string name="session_eval_supervised">supervisado</string>
<string name="session_eval_guide">guiado</string>
<string name="session_eval_model">modelado</string>
<string name="session_eval_notevuated">no evaluado</string>
<string name="session_eval_discarded">inválido</string>
<string name="crop">Recortar</string>
<string name="crop_TextRequired">Por favor, introduzca una leyenda para el pictograma</string>
<!-- Cropper -->
<string name="legendText">Leyenda:</string>
<string name="uploadingImage">Subiendo imagen al servidor</string>
<string name="cancel">Cancelar</string>
<string name="titleCropperEdit">Editar Pictograma</string>
<string name="titleCropperNew">Nuevo Pictograma</string>
<string name="insertPasswordLogin">Inserte Contraseña</string>
<string name="version_label">Versión:</string> <string name="version_label">Versión:</string>
<string name="message_from">Mensaje de</string> <string name="emptyVocabulary_msg">¡Tablero sin ningún pictograma visible! Visite Pictogram Web o use Pictogram Supervisor para añadir pictogramas</string>
<string name="says">Dice</string>
<string name="drawer_open">Abrir Menu</string>
<string name="drawer_close">Cerrar Menu</string>
<string name="titleCropper">Nuevo Pictograma</string>
</resources> </resources>
<resources> <resources>
<string name="app_name">com.yottacode.pictogram.Tablet</string> <string name="app_name">com.yottacode.pictogram.Tablet</string>
<string name="version_label">Versión:</string> <string name="version_label">Versión:</string>
<string name="alumnos">Alumnos</string> <string name="emptyVocabulary_msg">¡Tablero sin ningún pictograma visible! Visite Pictogram Web o use Pictogram Supervisor para añadir pictogramas</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_method">Método</string>
<string name="session_instruction">Instrucción</string>
<string name="session_header">Select method and instruction</string>
<string name="session_error">Server Error </string>
<string name="session_noinstructions">Student without any instrucction assigment</string>
<string name="session_loading">Descargando 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>
<string name="session_notclosed">Este alumno tiene una sesión abierta. Por favor cierre la sesión en el panel de control de Pictogram Web</string>
<string name="session_closed_ok">Sesión grabada correctamente</string>
<string name="session_closed_fail">Sesión no cerrada. Por favor intente cerrarla desde</string>
<string name="session_pause_error">Error pausando la sesión</string>
<string name="session_noinet">Conexión a Internet necesaria para grabar sesiones. Por favor, asegúrese que tiene conexión</string>
<string name="session_inetok">Conexión con el servidor restablecida</string>
<string name="session_log_startingsession">iniciando sesión</string>
<string name="session_log_closingsession">cerrando sesión</string>
<string name="session_log_startsession">sesión iniciada</string>
<string name="session_log_endingsession">finalizando sesión</string>
<string name="session_log_newtry">nuevo ensayo</string>
<string name="session_log_endtry">ensayo finalizado</string>
<string name="session_log_evaluatedtry">ensayo evaluado</string>
<string name="session_log_pausedtry">sesión en pausa</string>
<string name="session_log_continuedtry">sesión retomada</string>
<string name="session_eval_success">correcto</string>
<string name="session_eval_fail">incorrecto</string>
<string name="session_eval_spontaneous">espontáneo</string>
<string name="session_eval_supervised">supervisado</string>
<string name="session_eval_guide">guiado</string>
<string name="session_eval_model">modelado</string>
<string name="session_eval_notevuated">no evaluado</string>
<string name="session_eval_discarded">inválido</string>
<!-- Cropper -->
<string name="legendText">Leyenda:</string>
<string name="titleCropper">New pictogram</string>
<string name="crop">Recortar</string>
<string name="titleCropperNew">Nuevo Pictograma</string>
<string name="titleCropperEdit">Editar Pictograma</string>
<string name="crop_TextRequired">Por favor, introduzca una leyenda para el pictograma</string>
<string name="uploadingImage">Subiendo imagen al servidor</string>
<string name="cancel">Cancel</string>
<string name="drawer_open">Open Menu</string>
<string name="drawer_close">Close Menu</string>
<string name="insertPasswordLogin">Inserte Contraseña</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="message_from">Mensaje de</string>
<string name="says">Dice</string>
</resources> </resources>
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