Refactorización a Pictogram Communicator y Pictogram Supervisor

working in several issues
parent c9c3dc3d
Showing with 956 additions and 1954 deletions
......@@ -266,9 +266,14 @@ public class UserLogin {
public void login(String username, String password, Activity activity, Class PictogramActivity, Class LoginActivity) {
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))
manageSupervisorLogin(username,password,online, activity, PictogramActivity, LoginActivity);
if (PCBcontext.getContext().getPackageName().equals("com.yottacode.pictogram.communicator"))
GUITools.show_alert(PCBcontext.getContext(), R.string.login_ilegaluser);
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> {
}
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
*/
......
......@@ -75,7 +75,6 @@
<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">Crop</string>
<string name="titleCropper">New pictogram</string>
<string name="uploadingImage">Uploading image</string>
<string name="toStudentList">Student list</string>
......@@ -85,7 +84,8 @@
<string name="fa_exclamation_triangle">&#xf071;</string>
<string name="fa_user_plus">&#xf234;</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_supervisor_apk">https://play.google.com/store/apps/details?id=com.yottacode.supervisor</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.pictogram.supervisor</string>
<string name="login_ilegaluser">\" \"</string>
</resources>
......@@ -82,5 +82,6 @@
<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_supervisor_apk">https://play.google.com/store/apps/details?id=com.yottacode.supervisor</string>
<string name="login_ilegaluser">\" \"</string>
</resources>
......@@ -26,6 +26,7 @@
<string name="userLoadingMsg">Cargando 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>
<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>
......@@ -84,6 +85,6 @@
<string name="fa_exclamation_triangle">&#xf071;</string>
<string name="fa_user_plus">&#xf234;</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_supervisor_apk">https://play.google.com/store/apps/details?id=com.yottacode.supervisor</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.pictogram.supervisor</string>
</resources>
......@@ -21,7 +21,6 @@
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<application
android:name="com.yottacode.pictogram.communicator.kiosk.AppContext"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
......@@ -32,7 +31,8 @@
android:screenOrientation="landscape">
<intent-filter>
<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" />
</intent-filter>
</activity>
......@@ -51,6 +51,7 @@
android:screenOrientation="landscape" />
<activity
android:name="com.yottacode.pictogram.tabletlibrary.gui.communicator.VOCA"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTop"
......@@ -62,18 +63,15 @@
android:launchMode="singleTop"
android:screenOrientation="landscape" />
<!-- 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>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</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
android:name="com.yottacode.pictogram.tabletlibrary.gui.session.SessionActivity"
android:name="com.yottacode.pictogram.supervisor.gui.session.SessionActivity"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleInstance"
......@@ -85,6 +83,5 @@
android:label="@string/app_name"
android:launchMode="singleInstance"
android:screenOrientation="landscape" />
</application>
</manifest>
package com.yottacode.pictogram.communicator.kiosk;
package com.yottacode.pictogram.communicator;
import android.content.BroadcastReceiver;
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 @@
<string name="app_name">Pictogram Communicator</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_downloading">Please wait, downloading new version </string> -->
<string name="login_ilegaluser">Please, login as student or use Pictogram Supervisor </string>
</resources>
......@@ -3,7 +3,7 @@
<string name="app_name">Pictogram Communicator</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_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>
......@@ -2,6 +2,6 @@
<resources>
<string name="app_name">Pictogram Communicator</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="new_version_downloading">Por favor espere, descargando nueva versión </string> -->
<string name="login_ilegaluser">Please, login as student or use Pictogram Supervisor </string>
</resources>
......@@ -31,7 +31,6 @@
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
......@@ -49,18 +48,32 @@
android:label="@string/title_activity_login_activity_fragments"
android:screenOrientation="landscape" />
<activity
android:name="com.yottacode.pictogram.tabletlibrary.gui.communicator.VOCA"
android:name="com.yottacode.pictogram.supervisor.gui.VocabularyManager"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTop"
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
android:name="com.yottacode.pictogram.tabletlibrary.gui.session.SessionActivity"
android:name=".gui.session.SessionActivity"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTop"
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>
......
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.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.ColorRes;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.widget.ImageView;
import com.yottacode.pictogram.tabletlibrary.R;
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.graphics.Bitmap;
......@@ -7,8 +7,8 @@ import android.widget.ImageView;
import android.widget.RelativeLayout;
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.gui.communicator.cropper.EditPictoActivity;
import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.BitmapTools;
......@@ -125,7 +125,7 @@ public class PictoMenu {
BitmapTools.save_temporal(bitmap);
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
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator;
import java.util.ArrayList;
import java.util.List;
package com.yottacode.pictogram.supervisor.gui;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.*;
import android.graphics.Canvas;
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.util.Log;
import android.view.*;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.tools.PCBcontext;
import java.util.ArrayList;
import java.util.List;
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;
package com.yottacode.pictogram.supervisor.gui;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.PixelFormat;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
......@@ -16,22 +14,16 @@ import android.os.Bundle;
import android.provider.MediaStore;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.DragEvent;
import android.view.Gravity;
import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
......@@ -48,10 +40,9 @@ import com.yottacode.pictogram.net.ImgDownloader;
import com.yottacode.pictogram.net.PictoUploader;
import com.yottacode.pictogram.net.websockets.ActionTalk;
import com.yottacode.pictogram.net.websockets.VocabularyTalk;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.EditPictoActivity;
import com.yottacode.pictogram.tabletlibrary.gui.login.LoginActivity;
import com.yottacode.pictogram.tabletlibrary.gui.session.SessionActivity;
import com.yottacode.pictogram.supervisor.gui.cropper.EditPictoActivity;
import com.yottacode.pictogram.supervisor.gui.session.SessionActivity;
import com.yottacode.pictogram.supervisor.R;
import com.yottacode.pictogram.tabletlibrary.net.NetServiceTablet;
import com.yottacode.pictogram.tools.Img;
import com.yottacode.pictogram.tools.PCBcontext;
......@@ -62,14 +53,12 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
......@@ -97,8 +86,7 @@ public class VocabularyManager extends Activity implements VocabularyTalk.iVocab
private final List blockedKeys = new ArrayList(Arrays.asList(KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP));
// String constant for logs
private final String LOG_TAG = this.getClass().getSimpleName(); // Or .getCanonicalName()
// Count for delete long press (hidden exit)
private int count_deletelong = 0;
// Animation for hidding the picto category view
Animation hidePictoMainViewAnimation;
// Animation for showing the picto category view
......@@ -135,7 +123,7 @@ public class VocabularyManager extends Activity implements VocabularyTalk.iVocab
this.mainLayout = (RelativeLayout) findViewById(R.id.pictogramLayout);
this.currentCategory = null;
this.count_deletelong = 0;
if (!PCBcontext.is_user_logged()) {
Log.i(LOG_TAG, "No user logged. Restarting app");
NetServiceTablet.restart_PictogramTablet(this);
......@@ -162,8 +150,8 @@ public class VocabularyManager extends Activity implements VocabularyTalk.iVocab
String user = pictos.getJSONObject(0).getJSONObject("attributes").getString("user_avatar");
if (user.equals(PCBcontext.getPcbdb().getCurrentUser().get_email_sup())) { //si el primer picto tiene ese sup asociado
mensaje += getResources().getString(R.string.message_from) + ": " + PCBcontext.getPcbdb().getCurrentUser().get_name_stu() + ", " + PCBcontext.getPcbdb().getCurrentUser().get_surname_stu() + "\n";
mensaje += getResources().getString(R.string.says) + ": ";
mensaje += ": " + PCBcontext.getPcbdb().getCurrentUser().get_name_stu() + ", " + PCBcontext.getPcbdb().getCurrentUser().get_surname_stu() + "\n";
mensaje += ": ";
for (int i = 0; i < pictos.length(); i++) {
JSONObject picto = pictos.getJSONObject(i).getJSONObject("attributes");
mensaje += (i != pictos.length() - 1 ? picto.get("expression").toString() + " - " : picto.get("expression").toString());
......@@ -540,94 +528,6 @@ public class VocabularyManager extends Activity implements VocabularyTalk.iVocab
}
/**
* Disable Back Button --> Kiosk mode
*/
@Override
public void onBackPressed() {
// Inflate the layout for the AlertDialog
View dialogEscape = View.inflate(this, R.layout.dialog_escape, null);
final CheckBox checkBox = (CheckBox) dialogEscape.findViewById(R.id.checkBox);
final EditText input = (EditText) dialogEscape.findViewById(R.id.editText);
// Build de AlertDialog
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getResources().getString(R.string.exitPictogram));
builder.setView(dialogEscape);
// Set up the buttons
builder.setPositiveButton(getResources().getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String m_Text = input.getText().toString();
String keyword = PCBcontext.getDevice().getKeyword();
if (m_Text.equalsIgnoreCase(keyword)) {
// Change the password
if (checkBox.isChecked()) {
// Show a new dialog
View dialogChangeEscapeCode = View.inflate(PCBcontext.getContext(), R.layout.dialog_change_escape_code, null);
final EditText input1 = (EditText) dialogChangeEscapeCode.findViewById(R.id.editText1);
final EditText input2 = (EditText) dialogChangeEscapeCode.findViewById(R.id.editText2);
// Build the AlertDialog
AlertDialog.Builder builder = new AlertDialog.Builder(PCBcontext.getContext());
builder.setTitle(PCBcontext.getContext().getResources().getString(R.string.newEscapeCode));
builder.setView(dialogChangeEscapeCode);
// Set up the buttons
builder.setPositiveButton(getResources().getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Retrieve the text of the 2 password inputs
String m_Text1 = input1.getText().toString();
String m_Text2 = input2.getText().toString();
// If they are equal
if (m_Text1.equalsIgnoreCase(m_Text2)) {
// Change the keyword
PCBcontext.getDevice().setKeyword(m_Text1);
Toast.makeText(PCBcontext.getContext(), getResources().getString(R.string.codeModified), Toast.LENGTH_SHORT).show();
// And exit voca
finish();
} else
Toast.makeText(PCBcontext.getContext(), getResources().getString(R.string.codesNotEqual), Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton(getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
} else {
// Finish this Activity it the code is ok and is not checked the checkbox to change the code
finish();
/*
// Start the main activity
Intent mainActivity = new Intent(context, MainActivity.class);
startActivity(mainActivity);
*/
}
// Wrong code
} else
Toast.makeText(PCBcontext.getContext(), getResources().getString(R.string.wrongCode), Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton(getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
}
/**
* Disable volume button on key event
*
* @param event
......@@ -770,7 +670,7 @@ public class VocabularyManager extends Activity implements VocabularyTalk.iVocab
if (event.getX() > firstTouchX + 150) { // izquierda a derecha
// Pasa de VocabularyManager a voca
nextActivity = new Intent(this, VOCA.class);
nextActivity = new Intent(this, VOCAS.class);
in = R.anim.rightin;
out = R.anim.rightout;
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper;
package com.yottacode.pictogram.supervisor.gui.cropper;
import android.content.Context;
import android.content.res.Resources;
......@@ -16,14 +16,14 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ImageView;
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.tabletlibrary.gui.communicator.cropper.util.AspectRatioUtil;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util.HandleUtil;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util.PaintUtil;
import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.handle.Handle;
import com.yottacode.pictogram.supervisor.gui.cropper.util.AspectRatioUtil;
import com.yottacode.pictogram.supervisor.gui.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.app.Activity;
......@@ -42,9 +42,9 @@ import android.widget.TextView;
import android.widget.Toast;
import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.BotonCircular;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.PictoMenu;
import com.yottacode.pictogram.supervisor.gui.BotonCircular;
import com.yottacode.pictogram.supervisor.gui.PictoMenu;
import com.yottacode.pictogram.supervisor.R;
import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.BitmapTools;
import com.yottacode.tools.GUITools;
......@@ -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
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
if(editar){
......@@ -545,7 +545,7 @@ public class EditPictoActivity extends Activity {
camara.setOnClickListener(new View.OnClickListener() {
@Override
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);
}
});
......
......@@ -11,12 +11,12 @@
* 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.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.
......
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.
......
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.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.
......
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.support.annotation.NonNull;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.Edge;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.EdgePair;
import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.Edge;
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
......
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.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.
......
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.support.annotation.NonNull;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.Edge;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.EdgePair;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util.AspectRatioUtil;
import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.Edge;
import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.EdgePair;
import com.yottacode.pictogram.supervisor.gui.cropper.util.AspectRatioUtil;
/**
* 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.support.annotation.NonNull;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.Edge;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util.AspectRatioUtil;
import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.Edge;
import com.yottacode.pictogram.supervisor.gui.cropper.util.AspectRatioUtil;
/**
* 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.support.annotation.NonNull;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.cropwindow.edge.Edge;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util.AspectRatioUtil;
import com.yottacode.pictogram.supervisor.gui.cropper.cropwindow.edge.Edge;
import com.yottacode.pictogram.supervisor.gui.cropper.util.AspectRatioUtil;
/**
* 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.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.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.
......
package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper.util;
package com.yottacode.pictogram.supervisor.gui.cropper.util;
import android.content.res.Resources;
import android.graphics.Paint;
......
package com.yottacode.pictogram.tabletlibrary.gui.login;
package com.yottacode.pictogram.supervisor.gui.login;
import android.app.Activity;
import android.graphics.Bitmap;
......
package com.yottacode.pictogram.tabletlibrary.gui.session;
package com.yottacode.pictogram.supervisor.gui.session;
import android.app.Activity;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
......@@ -15,9 +15,9 @@ import android.widget.AdapterView;
import android.widget.ArrayAdapter;
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.R;
import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.GUITools;
......@@ -118,7 +118,7 @@ public class ListInstructionsFragment extends Fragment{
void close() {
ListInstructionsFragment.this.getActivity().finish();
startActivity(new Intent(getActivity(), VOCA.class));
startActivity(new Intent(getActivity(), VOCAS.class));
}
private void checkStudent() {
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.graphics.Bitmap;
......@@ -20,9 +20,9 @@ import android.widget.ToggleButton;
import com.yottacode.pictogram.dao.User;
import com.yottacode.pictogram.net.NetService;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.VOCA;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.VocabularyManager;
import com.yottacode.pictogram.supervisor.gui.VOCAS;
import com.yottacode.pictogram.supervisor.R;
import com.yottacode.pictogram.supervisor.gui.VocabularyManager;
import com.yottacode.pictogram.tabletlibrary.net.SessionWrapper;
import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.GUITools;
......@@ -342,7 +342,7 @@ public class SessionActivity extends FragmentActivity implements ListInstruction
void close() {
finish();
startActivity(new Intent(SessionActivity.this, VOCA.class));
startActivity(new Intent(SessionActivity.this, VOCAS.class));
}
private void set_fragment(boolean isChecked, final ToggleButton onoffBtn) {
......
......@@ -4,7 +4,7 @@
android:layout_height="fill_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
tools:context="com.yottacode.pictogram.tabletlibrary.gui.session.SessionActivity">
tools:context="com.yottacode.pictogram.supervisor.gui.session.SessionActivity">
<RelativeLayout
android:id="@+id/sessionTopbarLayout"
......
......@@ -61,7 +61,7 @@
android:layout_marginRight="25dp"
android:orientation="vertical">
<com.yottacode.pictogram.tabletlibrary.gui.communicator.BotonCircular
<com.yottacode.pictogram.supervisor.gui.BotonCircular
android:id="@+id/camara"
android:layout_width="64dp"
android:layout_height="64dp"
......@@ -71,7 +71,7 @@
android:background="#00ffffff"
android:src="@drawable/photo_camera" />
<com.yottacode.pictogram.tabletlibrary.gui.communicator.BotonCircular
<com.yottacode.pictogram.supervisor.gui.BotonCircular
android:id="@+id/galeria"
android:layout_width="64dp"
android:layout_height="64dp"
......@@ -217,7 +217,7 @@
android:text="00:00 | 00:10"
android:textColor="@color/VerdeApp" />
<com.yottacode.pictogram.tabletlibrary.gui.communicator.BotonCircular
<com.yottacode.pictogram.supervisor.gui.BotonCircular
android:id="@+id/botonGrabar"
android:layout_width="64dp"
android:layout_height="64dp"
......@@ -258,7 +258,7 @@
android:gravity="center"
android:orientation="horizontal">
<com.yottacode.pictogram.tabletlibrary.gui.communicator.BotonCircular
<com.yottacode.pictogram.supervisor.gui.BotonCircular
android:id="@+id/reproducir"
android:layout_width="48dp"
android:layout_height="48dp"
......@@ -289,7 +289,7 @@
</LinearLayout>
<com.yottacode.pictogram.tabletlibrary.gui.communicator.BotonCircular
<com.yottacode.pictogram.supervisor.gui.BotonCircular
android:id="@+id/botonBorrar"
android:layout_width="48dp"
android:layout_height="48dp"
......
......@@ -2,7 +2,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.yottacode.pictogram.tabletlibrary.gui.session.SessionFragment"
tools:context="com.yottacode.pictogram.supervisor.gui.session.SessionFragment"
android:orientation="vertical" >
<ListView
......
......@@ -6,7 +6,7 @@
android:keepScreenOn="true"
android:orientation="horizontal"
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
android:id="@+id/pictogramLayout"
......
......@@ -6,7 +6,7 @@
android:keepScreenOn="true"
android:orientation="horizontal"
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
android:id="@+id/pictogramLayout"
......
......@@ -2,6 +2,54 @@
<resources>
<string name="app_name">Pictogram Supervisor</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>
......@@ -2,6 +2,53 @@
<resources>
<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="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>
......@@ -2,5 +2,53 @@
<resources>
<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="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>
......@@ -40,13 +40,6 @@
<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/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/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testPreFlavorDebug/assets" type="java-test-resource" />
......@@ -54,6 +47,13 @@
<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/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/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/PreFlavor/assets" type="java-resource" />
......@@ -110,36 +110,53 @@
<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/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/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-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/reload-dex" />
<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/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/transforms" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<orderEntry type="jdk" jdkName="Android API 24 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<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-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="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="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-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="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-iid-9.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-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-tasks-9.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="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="ion-2.2.1" level="project" />
<orderEntry type="library" exported="" name="play-services-ads-9.2.1" level="project" />
......@@ -156,5 +173,6 @@
<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="json-20090211" level="project" />
<orderEntry type="library" exported="" name="constraint-layout-solver-1.0.0-beta3" level="project" />
</component>
</module>
\ No newline at end of file
......@@ -13,6 +13,7 @@ android {
resValue "integer", "columns", "10"
resValue "integer", "rows_big", "4"
resValue "integer", "columns_big", "8"
}
buildTypes {
release {
......@@ -32,4 +33,5 @@ dependencies {
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:support-v4:24.2.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"
package="com.yottacode.pictogram.tabletlibrary">
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true">
<activity android:name=".gui.communicator.EmptySceneActivity"></activity>
</application>
</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);
}
});
}
}
......@@ -2,9 +2,11 @@ package com.yottacode.pictogram.tabletlibrary.gui.communicator;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.Ringtone;
......@@ -27,8 +29,6 @@ import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.AdapterView;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
......@@ -43,7 +43,6 @@ import com.yottacode.pictogram.net.ImgDownloader;
import com.yottacode.pictogram.net.websockets.ActionTalk;
import com.yottacode.pictogram.net.websockets.VocabularyTalk;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.gui.session.SessionActivity;
import com.yottacode.pictogram.tabletlibrary.net.NetServiceTablet;
import com.yottacode.pictogram.tools.Img;
import com.yottacode.pictogram.tools.PCBcontext;
......@@ -113,7 +112,7 @@ public class VOCA extends Activity implements VocabularyTalk.iVocabularyListener
protected boolean tape_delivered = false;
float firstTouchX = -1;
public boolean inserting = false;
@TargetApi(Build.VERSION_CODES.M)
......@@ -121,6 +120,7 @@ public class VOCA extends Activity implements VocabularyTalk.iVocabularyListener
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!PCBcontext.getPcbdb().getCurrentUser().is_supervisor() && !isAppInLockTaskMode()) startLockTask();
requestWindowFeature(Window.FEATURE_NO_TITLE);
onWindowFocusChanged(true);
......@@ -150,8 +150,6 @@ public class VOCA extends Activity implements VocabularyTalk.iVocabularyListener
Log.i(this.getClass().getCanonicalName(), action + " from " + picto_cat + "," + picto_id + " catched");
if (action == ActionTalk.iActionListener.action.show) {
Log.i("TAG_PRUEBAS", "show message received:" + msg.toString());
JSONObject msg_attrs = null;
JSONArray pictos = null;
String mensaje = "";
......@@ -162,8 +160,8 @@ public class VOCA extends Activity implements VocabularyTalk.iVocabularyListener
String user = pictos.getJSONObject(0).getJSONObject("attributes").getString("user_avatar");
if (user.equals(PCBcontext.getPcbdb().getCurrentUser().get_email_sup())) { //si el primer picto tiene ese sup asociado
mensaje += getResources().getString(R.string.message_from) + ": " + PCBcontext.getPcbdb().getCurrentUser().get_name_stu() + ", " + PCBcontext.getPcbdb().getCurrentUser().get_surname_stu() + "\n";
mensaje += getResources().getString(R.string.says) + ": ";
mensaje += PCBcontext.getPcbdb().getCurrentUser().get_name_stu() + ", " + PCBcontext.getPcbdb().getCurrentUser().get_surname_stu() + "\n";
mensaje += ": ";
for (int i = 0; i < pictos.length(); i++) {
JSONObject picto = pictos.getJSONObject(i).getJSONObject("attributes");
mensaje += (i != pictos.length() - 1 ? picto.get("expression").toString() + " - " : picto.get("expression").toString());
......@@ -172,7 +170,7 @@ public class VOCA extends Activity implements VocabularyTalk.iVocabularyListener
Log.i(LOG_TAG, "Mensaje: " + msg.toString());
final AlertDialog.Builder builder = new AlertDialog.Builder(VOCA.this);
builder.setMessage(mensaje)
.setPositiveButton("Vale", new DialogInterface.OnClickListener() {
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
......@@ -301,9 +299,17 @@ public class VOCA extends Activity implements VocabularyTalk.iVocabularyListener
}
@Override
protected void onResume() {
super.onResume();
if (!PCBcontext.getVocabulary().isVisibleAnyPicto()) { Log.e("EEEEEEEEE","EEEEEEEEEEEEEEEEEEEEE");
finish();
Intent activity = new Intent(getBaseContext(), EmptySceneActivity.class);
startActivity(activity);
}
onWindowFocusChanged(true);
Log.i(LOG_TAG, "Resuming Pictogram Activity");
PCBcontext.setActivityContext(this);
......@@ -400,7 +406,7 @@ public class VOCA extends Activity implements VocabularyTalk.iVocabularyListener
@Override
public void onError(String utteranceId) {
Log.d(LOG_TAG, "TTS tape read error");
Log.e(LOG_TAG, "TTS tape read error");
this.finishSpeech();
}
......@@ -609,92 +615,14 @@ public class VOCA extends Activity implements VocabularyTalk.iVocabularyListener
refresh();
}
/**
* Disable Back Button --> Kiosk mode
*/
@Override
public void onBackPressed() {
// Inflate the layout for the AlertDialog
View dialogEscape = View.inflate(this, R.layout.dialog_escape, null);
final CheckBox checkBox = (CheckBox) dialogEscape.findViewById(R.id.checkBox);
final EditText input = (EditText) dialogEscape.findViewById(R.id.editText);
// Build de AlertDialog
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getResources().getString(R.string.exitPictogram));
builder.setView(dialogEscape);
// Set up the buttons
builder.setPositiveButton(getResources().getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String m_Text = input.getText().toString();
String keyword = PCBcontext.getDevice().getKeyword();
if (m_Text.equalsIgnoreCase(keyword)) {
// Change the password
if (checkBox.isChecked()) {
// Show a new dialog
View dialogChangeEscapeCode = View.inflate(PCBcontext.getContext(), R.layout.dialog_change_escape_code, null);
final EditText input1 = (EditText) dialogChangeEscapeCode.findViewById(R.id.editText1);
final EditText input2 = (EditText) dialogChangeEscapeCode.findViewById(R.id.editText2);
// Build the AlertDialog
AlertDialog.Builder builder = new AlertDialog.Builder(PCBcontext.getContext());
builder.setTitle(PCBcontext.getContext().getResources().getString(R.string.newEscapeCode));
builder.setView(dialogChangeEscapeCode);
// Set up the buttons
builder.setPositiveButton(getResources().getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Retrieve the text of the 2 password inputs
String m_Text1 = input1.getText().toString();
String m_Text2 = input2.getText().toString();
// If they are equal
if (m_Text1.equalsIgnoreCase(m_Text2)) {
// Change the keyword
PCBcontext.getDevice().setKeyword(m_Text1);
Toast.makeText(PCBcontext.getContext(), getResources().getString(R.string.codeModified), Toast.LENGTH_SHORT).show();
// And exit voca
finish();
} else
Toast.makeText(PCBcontext.getContext(), getResources().getString(R.string.codesNotEqual), Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton(getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
} else {
// Finish this Activity it the code is ok and is not checked the checkbox to change the code
finish();
/*
// Start the main activity
Intent mainActivity = new Intent(context, MainActivity.class);
startActivity(mainActivity);
*/
}
// Wrong code
} else
Toast.makeText(PCBcontext.getContext(), getResources().getString(R.string.wrongCode), Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton(getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
if (PCBcontext.getPcbdb().getCurrentUser().is_supervisor())
PCBcontext.getNetService().restart_app(true);
}
/**
......@@ -1031,54 +959,7 @@ public class VOCA extends Activity implements VocabularyTalk.iVocabularyListener
@Override
public boolean onLongClick(View v) {
count_deletelong++;
if (count_deletelong >= 3) {
//TODO: COMPROBAR SI LOS USUARIOS QUE BUSCO EXISTEN: SI NO PONER LOS DATOS POR DEFECTO*******************************************************************/
//Cojo los id del ultimo estudiante y el ultimo supervisor
int lastIdStu = PCBcontext.getDevice().getLastStuId();
User actual = PCBcontext.getPcbdb().getCurrentUser();
User usuario_anterior;
String lastUserName = null;
String lastPassword = null;
if (actual.is_supervisor()) //Si el que habia es supervisor busco el ultimo niño
try {
usuario_anterior = PCBcontext.getDevice().findUser(lastIdStu, User.NO_SUPERVISOR);
if (usuario_anterior != null) {
lastUserName = usuario_anterior.get_nickname_stu();
lastPassword = usuario_anterior.get_pwd_stu();
}
} catch (JSONException e) {
e.printStackTrace();
}
else {
int lastIdSup = PCBcontext.getDevice().getLastSupId();
try {
usuario_anterior = PCBcontext.getDevice().findUser(lastIdStu, lastIdSup);
if (usuario_anterior != null) {
lastUserName = usuario_anterior.get_email_sup();
lastPassword = usuario_anterior.get_pwd_sup();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
Intent serialActivity = new Intent(getBaseContext(), com.yottacode.pictogram.tabletlibrary.gui.login.SerialActivity.class);
if (lastUserName != null) {
Log.i(this.getClass().getCanonicalName(), "Switch user to " + lastUserName);
serialActivity.putExtra("switch_usr", lastUserName);
serialActivity.putExtra("switch_pwd", lastPassword);
}
pictoCategoryGridAdapter.notifyDataSetInvalidated();
pictoMainGridAdapter.notifyDataSetInvalidated();
VOCA.this.finish();
if (SessionActivity.session != null) SessionActivity.session.finish();
PCBcontext.getNetService().restart_app(true);
}
return true;
......@@ -1095,139 +976,24 @@ public class VOCA extends Activity implements VocabularyTalk.iVocabularyListener
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
int in = 0, out = 0;
Intent nextActivity = null;
Intent intent = getIntent();
public boolean isAppInLockTaskMode() {
ActivityManager activityManager;
if (PCBcontext.getPcbdb() != null && PCBcontext.getPcbdb().getCurrentUser().is_supervisor()) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
firstTouchX = event.getX();
break;
activityManager = (ActivityManager)
this.getSystemService(Context.ACTIVITY_SERVICE);
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);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// For SDK version 23 and above.
return activityManager.getLockTaskModeState()
!= ActivityManager.LOCK_TASK_MODE_NONE;
}
in = R.anim.leftin;
out = R.anim.leftout;
if (nextActivity != null) {
tape_delivered = false;
finish();
startActivity(nextActivity);
overridePendingTransition(in, out);
}
break;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// When SDK version >= 21. This API is deprecated in 23.
return activityManager.isInLockTaskMode();
}
}
return super.dispatchTouchEvent(event);
}
/**
* Para capturar el evento para abrir camara o galeria y procesar
* @param requestCode
* @param resultCode
* @param data
*/
/*protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Bitmap imagen;
switch(requestCode) {
case CAMERA_PIC_REQUEST: //Captura de foto
if (data != null && resultCode==RESULT_OK) {
imagen = (Bitmap) data.getExtras().get("data");
this.launchEditPictoActivity(imagen);
}
break;
case GALLERY_PIC_REQUEST: //Galeria
if(data!=null){
Uri selectedImage = data.getData();
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
} catch (IOException e) {
e.printStackTrace();
}
this.launchEditPictoActivity(bitmap);
}
break;
case EditPictoActivity.EDIT_PICTO_REQUEST:
if (resultCode == RESULT_OK) {
boolean edit = data.getBooleanExtra(PictoMenu.IS_EDIT,false);
int row = edit ? data.getExtras().getInt(Picto.JSON_ATTTRS.ROW) : getIntent().getIntExtra(Picto.JSON_ATTTRS.ROW, -1);
int col = edit ? data.getExtras().getInt(Picto.JSON_ATTTRS.COLUMN) : getIntent().getIntExtra(Picto.JSON_ATTTRS.COLUMN, -1);
int freeRow = edit ? data.getExtras().getInt(Picto.JSON_ATTTRS.FREE_ROW) : getIntent().getIntExtra(Picto.JSON_ATTTRS.FREE_ROW, -1);
int freeColumn = edit ? data.getExtras().getInt(Picto.JSON_ATTTRS.FREE_COLUMN) : getIntent().getIntExtra(Picto.JSON_ATTTRS.FREE_COLUMN, -1);
String path_sound = data.getExtras().getString(PictoMenu.PATH_SOUND);
String user_avatar = data.getExtras().getString(Picto.JSON_ATTTRS.USER_AVATAR)*//* : getIntent().getStringExtra(Picto.JSON_ATTTRS.USER_AVATAR, "----")*//*;
int cat = edit ? data.getIntExtra(Picto.JSON_ATTTRS.CATEGORY, -1) : getIntent().getIntExtra(Picto.JSON_ATTTRS.CATEGORY, -1);
String path = data.getExtras().getString(PictoMenu.PATH);
String legend = data.getExtras().getString(Picto.JSON_ATTTRS.EXPRESSION);
chooseTextAndSavePicto(path, row, col, freeRow, freeColumn, cat, legend, path_sound ,user_avatar);
refresh();
}
break;
}
}*/
/**
* función para la edición de un texto asociado a una nueva imagen y guardar el nuevo picto
*/
/*public void chooseTextAndSavePicto(final String selectedImagePath, final int row, final int col, final int freeRow, final int freeColumn,
final int category, final String legend,final String path_sound ,final String user_avatar) {
// Set up the buttons
PCBcontext.getVocabulary().saveLocalPicto(
selectedImagePath,
legend,
category,
row,
col,
freeRow,
freeColumn,
user_avatar,
path_sound,
new iLocalPicto() {
@Override
public void saved(Picto localPicto) {
refresh();
try {
if (PCBcontext.is_user_online())
new PictoUploader(localPicto).upload();
} catch (IOException e) {
Log.e(Vocabulary.class.getCanonicalName(), e.getMessage());
}
return false;
}
});
}*/
/**Para cambiar la activity de voca a EditPictoActivity
* @param image
*/
/*public void launchEditPictoActivity(Bitmap image){
Intent intent = new Intent(this, EditPictoActivity.class);
BitmapTools.save_temporal(image);
startActivityForResult(intent, EditPictoActivity.EDIT_PICTO_REQUEST);
}*/
}
......@@ -4,7 +4,6 @@ import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
......@@ -18,7 +17,6 @@ import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.yottacode.pictogram.dao.Device;
import com.yottacode.pictogram.dao.User;
......@@ -27,7 +25,6 @@ import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.VOCA;
import com.yottacode.pictogram.tabletlibrary.net.NetServiceTablet;
import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.GUITools;
import org.json.JSONException;
......@@ -45,8 +42,8 @@ public class SerialActivity extends Activity {
EditText mSerialViewMail;
EditText mSerialViewPass;
LinearLayout stuList;
LinearLayout supList;
LinearLayout userList;
/**
* Return the default user+pwd when login.The policy is
......@@ -67,76 +64,34 @@ public class SerialActivity extends Activity {
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){
final Vector<User> stuUsers = new Vector<>();
private void createUserList(Vector<User> vusers){
final Vector<User> users = 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()) {
stuUsers.add(user);
idUsers.add(user.get_id_stu());
}
}
if(!vusers.isEmpty())
for(User user: vusers){
users.add(user);
idUsers.add(user.is_supervisor() ? user.get_id_sup() : user.get_id_stu());
}
if(!stuUsers.isEmpty()){
CustomListLogin adapterStu = new CustomListLogin(this,stuUsers);
ListView listaStu = (ListView) findViewById(R.id.stuList);
listaStu.setAdapter(adapterStu);
listaStu.setOnItemClickListener(new AdapterView.OnItemClickListener() {
if(!users.isEmpty()){
CustomListLogin adapterUser = new CustomListLogin(this,users);
ListView listUsers = (ListView) findViewById(R.id.userList);
listUsers.setAdapter(adapterUser);
listUsers.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
SharedPreferences settings = getSharedPreferences(Device.PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("username", stuUsers.elementAt(position).get_nickname_stu());
editor.putString("password", stuUsers.elementAt(position).get_pwd_stu());
editor.putString("username", users.elementAt(position).get_nickname_stu());
editor.putString("password", users.elementAt(position).get_pwd_stu());
editor.commit();
new UserLogin().login(stuUsers.elementAt(position).get_nickname_stu(),
stuUsers.elementAt(position).get_pwd_stu(),SerialActivity.this, VOCA.class, LoginActivity.class);
new UserLogin().login(users.elementAt(position).get_nickname_stu(),
users.elementAt(position).get_pwd_stu(),SerialActivity.this, VOCA.class, LoginActivity.class);
}
});
}
......@@ -158,8 +113,8 @@ public class SerialActivity extends Activity {
mSerialViewMail = (EditText) findViewById(R.id.serialmail);
mSerialViewPass = (EditText) findViewById(R.id.serialpass);
stuList = (LinearLayout) findViewById(R.id.stuLay);
supList = (LinearLayout) findViewById(R.id.supLay);
userList = (LinearLayout) findViewById(R.id.supstulist);
Button mEntrarButton = (Button) findViewById(R.id.entrar_button);
mEntrarButton.setOnClickListener(new OnClickListener() {
......@@ -201,8 +156,7 @@ public class SerialActivity extends Activity {
super.onStart();
try {
users = PCBcontext.getDevice().getUsers();
createListSup(users);
createListStu(users);
createUserList(users);
if (username.equals("") && users.size()==0) {
((TextView) findViewById(R.id.txt_firstlogin)).append('\n' + getString(R.string.login_web));
findViewById(R.id.firstlogin).setVisibility(View.VISIBLE);
......
package com.yottacode.pictogram.tabletlibrary.gui.login;
import android.app.AlertDialog;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.GridView;
import com.yottacode.net.RestapiWrapper;
import com.yottacode.pictogram.dao.User;
import com.yottacode.pictogram.net.ImgDownloader;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.VOCA;
import com.yottacode.pictogram.tools.Img;
import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.GUITools;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Vector;
/**
* StudentFragmentGrid implements the gridview with the students
*
* @author Miguel Ángel García Cumbreras
* @author Fernando
* @version 1.1
*/
public class StudentFragmentGrid extends Fragment {
final String TAG_ID = "id";
final String TAG_USERNAME = "username";
final String TAG_NAME = "name";
final String TAG_SURNAME = "surname";
final String TAG_ID_SCENE = "id_active_scene";
final String TAG_GENDER = "gender";
final String TAG_PIC = "pic";
final String TAG_LANG = "lang";
final String TAG_ATTRIBUTES = "attributes";
ProgressDialog progressDialog;
Vector<Integer> idStudents;
String nameStudents[];
Vector<Bitmap> imageStudents;
String licenseStudents[];
private Vector<JSONObject> downloaded_students;
private final String LOG_TAG = this.getClass().getSimpleName(); // Or .getCanonicalName()
GridView gridView;
boolean onlineStudentsOK = false;
/**
* Show students grid
*/
private void showStudentsGrid() {
CustomList adapter = new CustomList(getActivity(), nameStudents, imageStudents, licenseStudents);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
set_user(pos);
}
});
}
/**
* Set current user
* @param i Position of student in students name array (nameStudents)
*/
private void set_user(int i) {
Boolean offline = getActivity().getIntent().getBooleanExtra("offline", false);
if (offline) {
User currentUser = null;
try {
currentUser = PCBcontext.getDevice().findUser(idStudents.get(i), getActivity().getIntent().getIntExtra("sup_id", 0));
} catch (JSONException e) {
e.printStackTrace();
Log.e(StudentFragmentGrid.this.getClass().getCanonicalName(), e.getMessage());
}
PCBcontext.set_user(currentUser, null, null);
Intent pictogramActivity = new Intent(getActivity(), VOCA.class);
startActivity(pictogramActivity);
} else {
if (this.nameStudents[i].equals(getString(R.string.addStudent)))
register_student(getActivity().getIntent().getIntExtra("sup_id", 0));
else {
// checks if license is valid for this user
if(licenseStudents[i].equals("expired_trial")){
AlertDialog.Builder builder1 = new AlertDialog.Builder(getActivity());
builder1.setMessage(R.string.loginNoLicenseMsg);
builder1.setPositiveButton(
R.string.accept,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert11 = builder1.create();
alert11.show();
return;
}
new_user(i, licenseStudents[i].equals("pro") || licenseStudents[i].equals("trial") );
download_supervisors(PCBcontext.getPcbdb().getCurrentUser().get_id_stu());
}
}
}
/**
* Register a new student using his license
* @param sup_id Supervisor id
*/
private void register_student(final int sup_id) {
AlertDialog.Builder alert = new AlertDialog.Builder(this.getActivity());
final EditText edittext = new EditText(this.getActivity());
alert.setMessage(getString(R.string.getLicenseStudent));
alert.setTitle(getString(R.string.addStudent));
alert.setView(edittext);
alert.setPositiveButton(R.string.accept, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//What ever you want to do with the value
String license = edittext.getText().toString().replaceAll("[^a-zA-Z0-9]", "").toUpperCase();
RestapiWrapper wrapper = PCBcontext.getRestapiWrapper();
final String operation = "stu/license/sup/" + sup_id;
Hashtable<String, String> params = new Hashtable<String, String>(1);
params.put("license", license);
wrapper.ask(operation, params, "post", new RestapiWrapper.iRestapiListener() {
@Override
public void error(RestapiWrapper.HTTPException e) {
Log.e(this.getClass().getName(), " Server restapi error. Operation: "+operation +". Message:"+ e.getLocalizedMessage());
String err = e.getLocalizedMessage();
if (err.indexOf("nvalid license") > 0)
GUITools.show_alert(getActivity(), R.string.loginNoLicenseMsg);
}
@Override
public void preExecute() {
}
@Override
public void result(JSONArray result) {
}
@Override
public void result(JSONObject result) {
PCBcontext.getNetService().restart_app(false);
}
});
}
});
alert.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// what ever you want to do with No option.
}
});
alert.show();
}
/**
* Change user data, load vocabulary and goes to VOCA Activity
* @param i Position on students downloaded collection
* @param license_valid
*/
private void new_user(int i, final boolean license_valid) {
JSONObject st = this.downloaded_students.get(i);
Intent intent = getActivity().getIntent();
try {
Log.i(LOG_TAG, st.toString());
PCBcontext.getPcbdb();
User new_user = new User(
st.getInt(TAG_ID),
st.getString(TAG_USERNAME),
null,
st.getString(TAG_NAME),
st.getString(TAG_SURNAME),
st.getInt(TAG_ID_SCENE),
st.getString(TAG_PIC),
st.getString(TAG_GENDER),
st.getString(TAG_LANG),
st.getString(TAG_ATTRIBUTES),
intent.getIntExtra("sup_id", 0),
intent.getStringExtra("email"),
intent.getStringExtra("password"),
intent.getStringExtra("name"),
intent.getStringExtra("surname"),
intent.getStringExtra("pic"),
intent.getStringExtra("gender"),
intent.getStringExtra("lang"),
"",
intent.getStringExtra("office")
);
Log.i(this.getClass().getCanonicalName(), "Loading vocabulary for " + new_user.get_name_stu() + " office:" + intent.getStringExtra("office"));
PCBcontext.getDevice().insertUser(new_user);
progressDialog = ProgressDialog.show(getActivity(), getString(R.string.loadingGrammar), getString(R.string.userLoadingTxt), false, false);
PCBcontext.set_user(new_user, intent.getStringExtra("token"), new ImgDownloader.iImgDownloaderListener() {
@Override
public void loadComplete() {
if (progressDialog != null && progressDialog.isShowing())
progressDialog.dismiss();
PCBcontext.getPcbdb().user_valid(license_valid);
Intent pictogramActivity = new Intent(getActivity(), VOCA.class);
startActivity(pictogramActivity);
}
@Override
public void loadImg(Img image) {
}
public void error(Exception e) {
if (progressDialog.isShowing()) progressDialog.dismiss();
GUITools.show_alert(StudentFragmentGrid.this.getActivity(), R.string.serverError, e.getMessage());
Log.e(this.getClass().getCanonicalName(), "Server error:" + e.getLocalizedMessage());
}
});
} catch (JSONException e) {
e.printStackTrace();
Log.e(StudentFragmentGrid.this.getClass().getCanonicalName(), e.getMessage());
}
}
/**
* Process JSON into collections
*/
private void show_student_list_online() {
final int listsize = downloaded_students.size() + 1;
final Vector<Img> imgs = new Vector<>(listsize);
this.nameStudents = new String[listsize];
this.idStudents = new Vector<>(listsize);
this.imageStudents = new Vector<>(listsize);
this.licenseStudents = new String[listsize];
for (int i = 0; i < downloaded_students.size(); i++) {
JSONObject st;
try {
st = downloaded_students.get(i);
Integer st_id = st.getInt(TAG_ID);
String st_name = st.getString(TAG_NAME);
String st_pic = st.getString(TAG_PIC);
nameStudents[i] = st_name;
idStudents.add(st_id);
imgs.add(new Img(st_id, st_pic, Img.STUDENT)); //it's required to download student's images
// Checks if license is trial or pro (not expired)
licenseStudents[i] = !st.getJSONObject("license").getBoolean("isValid")
? (st.getJSONObject("license").getBoolean("isTrial")
? "expired_trial"
: "expired_official")
: st.getJSONObject("license").getBoolean("isTrial")
? "trial"
: "pro";
} catch (JSONException e) {
e.printStackTrace();
Log.e(StudentFragmentGrid.this.getClass().getCanonicalName(), e.getMessage());
}
} //for
nameStudents[listsize - 1] = getString(R.string.addStudent);
idStudents.add(-1);
licenseStudents[listsize -1] = "pro";
imgs.add(new Img(-1, null, Img.STUDENT)); //it's required to download student's images
ImgDownloader downloader = new ImgDownloader(getActivity(), new ImgDownloader.iImgDownloaderListener() {
private void loaded() {
try {
if (downloaded_students.size() >= 1)
for (int i = 0; i < imgs.size(); i++)
imageStudents.add(imgs.get(i).get_bitmap(getActivity().getBaseContext()));
imageStudents.add(imgs.get(listsize - 1).get_bitmap(getActivity().getBaseContext()));
} catch (IOException e) {
e.printStackTrace();
Log.e(StudentFragmentGrid.this.getClass().getCanonicalName(), e.getMessage());
}
if (StudentFragmentGrid.super.getView() != null)
showStudentsGrid();
else
onlineStudentsOK = true;
}
@Override
public void loadComplete() {
loaded();
}
@Override
public void loadImg(Img image) {
loaded();
}
public void error(Exception e) {
if (progressDialog.isShowing()) progressDialog.dismiss();
GUITools.show_alert(PCBcontext.getContext(), R.string.serverError, e.getMessage());
Log.e(this.getClass().getCanonicalName(), "Server error:" + e.getLocalizedMessage());
}
}, ImgDownloader.tsource.remote);
downloader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, imgs);
}
/**
* Recupera los supervisores de un alumno
*
* @param stu_id
* @author Germán Callejas
*/
private void download_supervisors(final int stu_id) {
String token = getActivity().getIntent().getExtras().getString("token");
RestapiWrapper wrapper = PCBcontext.getRestapiWrapper();
wrapper.setToken(token);
final String operation = "stu/" + stu_id + "/supervisors";
wrapper.ask(operation, new RestapiWrapper.iRestapiListener() {
@Override
public void error(RestapiWrapper.HTTPException e) {
Log.e(this.getClass().getName(), " Server restapi error. Operation: "+operation +". Message:"+ e.getLocalizedMessage());
GUITools.show_alert(getActivity(), R.string.loginErrorTxt, getString(R.string.serverError), new GUITools.iOKListener() {
@Override
public void ok() {
PCBcontext.getNetService().restart_app(false);
}
});
}
@Override
public void preExecute() {
}
@Override
public void result(JSONArray supervisors) {
Vector<String> idSupervisoresJSON = new Vector<>();
for (int i = 0; i < supervisors.length(); i++) {
JSONObject supervisor = null;
try {
supervisor = supervisors.getJSONObject(i);
idSupervisoresJSON.add(supervisor.getString("email"));
if (!PCBcontext.getDevice().isSupervisorOnLocal((int) supervisor.get("id"), stu_id)) {//Para comprobar si ya existe en local
User currentUser = PCBcontext.getPcbdb().getCurrentUser();
PCBcontext.getDevice().insertUser(new User(stu_id, currentUser.get_nickname_stu(), currentUser.get_pwd_stu()
, currentUser.get_name_stu(), currentUser.get_surname_stu(), currentUser.get_active_scene(), currentUser.get_url_img_stu()
, currentUser.get_gender_stu(), currentUser.get_lang_stu(), currentUser.get_json_attrs(),
(int) supervisor.get("id"), supervisor.get("email").toString(), "_", supervisor.get("name").toString(), supervisor.get("surname").toString(), supervisor.get("pic").toString(),
supervisor.get("gender").toString(), supervisor.get("lang").toString(), supervisor.get("ttsEngine").toString(), supervisor.get("office").toString()));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
/**Eliminar los que habia y que ya no vienen en el JSON */
try {
Hashtable<String, String> supervisorsLocal = PCBcontext.getDevice().recoverSupervisors(stu_id);
if (supervisorsLocal != null && !supervisorsLocal.isEmpty()) {
for (String email_sup : supervisorsLocal.keySet()) {
if (!idSupervisoresJSON.contains(email_sup)) {
//Coge la segunda parte ya que el formato del dato es Nombre, Apellidos;id_sup
PCBcontext.getDevice().deleteSupervisor(stu_id, Integer.parseInt(supervisorsLocal.get(email_sup).split(";")[1]));
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void result(JSONObject result) {
}
});
}
/**
* Download students from supervisor into downloaded_students
* @param sup_id Supervisor id
*/
private void download_students(final int sup_id) {
String token = getActivity().getIntent().getExtras().getString("token");
RestapiWrapper wrapper = PCBcontext.getRestapiWrapper();
wrapper.setToken(token);
final String operation = "sup/" + sup_id + "/students";
wrapper.ask(operation, new RestapiWrapper.iRestapiListener() {
@Override
public void error(RestapiWrapper.HTTPException e) {
Log.e(this.getClass().getName(), " Server restapi error. Operation: "+operation +". Message:"+ e.getLocalizedMessage());
GUITools.show_alert(getActivity(), R.string.loginErrorTxt, getString(R.string.serverError), new GUITools.iOKListener() {
@Override
public void ok() {
PCBcontext.getNetService().restart_app(false);
}
});
}
@Override
public void preExecute() {
}
@Override
public void result(JSONArray students) {
if (progressDialog != null && progressDialog.isShowing()) progressDialog.dismiss();
StudentFragmentGrid.this.downloaded_students = new Vector();
for (int i = 0; i < students.length(); i++) {
JSONObject student;
try {
student = students.getJSONObject(i);
StudentFragmentGrid.this.downloaded_students.add(student);
} catch (JSONException e) {
e.printStackTrace();
}
}
show_student_list_online();
}
@Override
public void result(JSONObject result) {
}
});
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onStart() {
super.onStart();
Intent intent = getActivity().getIntent();
Boolean offline = intent.getBooleanExtra("offline", false);
int sup_id = intent.getIntExtra("sup_id", 0);
if (offline) {
Vector<User> users;
try {
users = PCBcontext.getDevice().recoverStudents(sup_id);
Log.i(this.getClass().getCanonicalName(), "Recovering " + users.size() + " students list for " + sup_id + " from local DB");
} catch (JSONException e) {
e.printStackTrace();
users = null;
}
int i = 0;
this.nameStudents = new String[users.size()];
this.idStudents = new Vector<>(users.size());
this.imageStudents = new Vector<>(users.size());
for (User user : users) {
this.idStudents.add(user.get_id_stu());
this.nameStudents[i++] = user.get_name_stu();
try {
this.imageStudents.add(user.get_bitmap_stu(getActivity().getBaseContext()));
} catch (IOException e) {
e.printStackTrace();
Log.e(this.getClass().getName(), " Getting images error: " + e.getLocalizedMessage());
}
}
} else
download_students(sup_id);
if (offline || onlineStudentsOK) showStudentsGrid();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_new_student, container, false);
gridView = (GridView) view.findViewById(R.id.loginStudentGridView);
return view;
}
@Override
public void onPause() {
super.onPause();
if ((progressDialog != null) && progressDialog.isShowing())
progressDialog.dismiss();
progressDialog = null;
}
}
package com.yottacode.pictogram.tabletlibrary.gui.session;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.util.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,16 +31,18 @@ public class NetServiceTablet implements NetService.iNetServiceDevice {
public void build() {
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) {
Intent resultIntent = new Intent(PCBcontext.getContext(), this.VOCA.getClass());
TaskStackBuilder stackBuilder = TaskStackBuilder.create(PCBcontext.getContext());
stackBuilder.addParentStack(VOCA.class);
stackBuilder.addParentStack(this.VOCA.getClass());
stackBuilder.addNextIntent(resultIntent);
if (PCBcontext.getContext().getResources().getBoolean(R.bool.NotifyAllwaysVisible)){
if (PCBcontext.getContext().getResources().getBoolean(R.bool.NotifyAllwaysVisible)) {
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(resultPendingIntent);
}
}
}
public void notifyStatus(boolean updated) {
String user="";
......
<?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 @@
android:background="#eeeeee"
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>
......
......@@ -126,39 +126,29 @@
android:textAlignment="center"
android:textColor="@color/BlancoApp"
android:textSize="18sp"
tools:text="Alumnos" />
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:orientation="horizontal"
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">
android:id="@+id/supstulist">
<TextView
android:id="@+id/labelStu"
android:id="@+id/labelUser"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/VerdeApp"
android:text="@string/alumnos"
android:textAlignment="center"
android:textColor="@color/BlancoApp"
android:textSize="18sp"
tools:text="Alumnos" />
tools:text="" />
<ListView
android:id="@+id/stuList"
android:id="@+id/userList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@color/common_plus_signin_btn_text_light_disabled"
......@@ -169,42 +159,8 @@
</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>
</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 @@
<ImageButton
android:id="@+id/button_tts"
android:layout_width="@dimen/tape_normal_height"
android:layout_height="@dimen/tape_normal_height"
android:layout_width="@dimen/tape_big_height"
android:layout_height="@dimen/tape_big_height"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:adjustViewBounds="true"
......@@ -50,6 +50,7 @@
android:clickable="true"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:scaleType="fitCenter"
android:src="@drawable/send_tape" />
<ImageButton
......
......@@ -45,6 +45,7 @@
android:id="@+id/button_tts"
android:layout_width="@dimen/tape_big_height"
android:layout_height="@dimen/tape_big_height"
android:scaleType="fitCenter"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:adjustViewBounds="true"
......
<resources>
<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_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="message_from">Message from</string>
<string name="says">Says</string>
<string name="drawer_open">Open Menu</string>
<string name="drawer_close">Close Menu</string>
<string name="emptyVocabulary_msg">¡Tablero sin ningún pictograma visible! Visite Pictogram Web o use Pictogram Supervisor para añadir pictogramas</string>
</resources>
<resources>
<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_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="message_from">Mensaje de</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>
<string name="emptyVocabulary_msg">¡Tablero sin ningún pictograma visible! Visite Pictogram Web o use Pictogram Supervisor para añadir pictogramas</string>
</resources>
<resources>
<string name="app_name">com.yottacode.pictogram.Tablet</string>
<string name="version_label">Versión:</string>
<string name="alumnos">Alumnos</string>
<string name="supervisores">Supervisores</string>
<string name="emptyVocabulary_msg">¡Tablero sin ningún pictograma visible! Visite Pictogram Web o use Pictogram Supervisor para añadir pictogramas</string>
<item name="maxInTape" type="integer">8</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>
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