parent 89225832
...@@ -157,11 +157,12 @@ public class RestapiWrapper { ...@@ -157,11 +157,12 @@ public class RestapiWrapper {
JSONresponse = new JSONObject("{ "+SERVER_RESULT+": " + response + (responseCode == HttpURLConnection.HTTP_OK JSONresponse = new JSONObject("{ "+SERVER_RESULT+": " + response + (responseCode == HttpURLConnection.HTTP_OK
? "}" ? "}"
: ", "+SERVER_ERROR+": " + responseCode +"}")); : ", "+SERVER_ERROR+": " + responseCode +"}"));
Log.i(LOG_TAG, "Server answer: " + JSONresponse.toString());
} catch (JSONException e) { } catch (JSONException e) {
JSONresponse = null; JSONresponse = null;
Log.e(RestapiWrapper.class.getCanonicalName(),e.getMessage()); Log.e(RestapiWrapper.class.getCanonicalName(),e.getMessage());
} }
Log.i(LOG_TAG, "Server answer: " + JSONresponse.toString());
return JSONresponse; return JSONresponse;
} }
......
...@@ -2,6 +2,7 @@ package com.yottacode.pictogram.dao; ...@@ -2,6 +2,7 @@ package com.yottacode.pictogram.dao;
import android.graphics.Color; import android.graphics.Color;
import android.os.Environment;
import android.util.Log; import android.util.Log;
import com.yottacode.pictogram.action.VocabularyAction; import com.yottacode.pictogram.action.VocabularyAction;
...@@ -12,6 +13,11 @@ import com.yottacode.pictogram.tools.PCBcontext; ...@@ -12,6 +13,11 @@ import com.yottacode.pictogram.tools.PCBcontext;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
/** /**
* A object which represents a pictogram * A object which represents a pictogram
...@@ -24,6 +30,7 @@ public class Picto extends Img { ...@@ -24,6 +30,7 @@ public class Picto extends Img {
private static final String LOG_TAG =Img.class.getName(); private static final String LOG_TAG =Img.class.getName();
public static final int STUPICTO_NULL = -1; public static final int STUPICTO_NULL = -1;
public int get_stupicto_id() { public int get_stupicto_id() {
int stupicto_id; int stupicto_id;
try { try {
...@@ -90,7 +97,7 @@ public class Picto extends Img { ...@@ -90,7 +97,7 @@ public class Picto extends Img {
Log.e(LOG_TAG,e.getMessage()); Log.e(LOG_TAG,e.getMessage());
} }
} }
public Picto(int id, String url, String translation, int cat, int row, int column, int freeRow, int freeColumn, int stupicto_id, String uri_sound, String user_avatar) throws JSONException { public Picto(int id, String url, String translation, int cat, int row, int column, int freeRow, int freeColumn, int stupicto_id, String user_avatar) throws JSONException {
this(id, url, new JSONObject() this(id, url, new JSONObject()
.put(JSON_ATTTRS.CATEGORY, cat) .put(JSON_ATTTRS.CATEGORY, cat)
.put(JSON_ATTTRS.COLUMN, column) .put(JSON_ATTTRS.COLUMN, column)
...@@ -101,7 +108,6 @@ public class Picto extends Img { ...@@ -101,7 +108,6 @@ public class Picto extends Img {
.put(JSON_ATTTRS.LEGEND,JSON_ATTTR_LEGEND_VALUES.NONE) .put(JSON_ATTTRS.LEGEND,JSON_ATTTR_LEGEND_VALUES.NONE)
.put(JSON_ATTTRS.STUPICTO_ID,stupicto_id) .put(JSON_ATTTRS.STUPICTO_ID,stupicto_id)
.put(JSON_ATTTRS.EXPRESSION,translation) .put(JSON_ATTTRS.EXPRESSION,translation)
.put(JSON_ATTTRS.URI_SOUND,uri_sound)
.put(JSON_ATTTRS.USER_AVATAR,user_avatar) .put(JSON_ATTTRS.USER_AVATAR,user_avatar)
); );
} }
...@@ -122,6 +128,32 @@ public class Picto extends Img { ...@@ -122,6 +128,32 @@ public class Picto extends Img {
} }
public static String getAudioPictosPath() {
return Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_MUSIC+File.separator +"PictoAudio";
}
public String get_audioPath() {
String audioPath=getAudioPictosPath();
return audioPath+File.separator+"pictosound_"+PCBcontext.getPcbdb().getCurrentUser().get_id_stu()+"_"+this.get_id()+".mp3";
}
public File get_audioFile() {
File file = new File(get_audioPath());
return file.exists() ? file : null;
}
/*
* @override
*/
public void update_id(int id) {
if (get_audioFile()!=null) { //es necesario actualizar el nombre del audio, si lo hay
File from = get_audioFile();
super.update_id(id);
File to = new File(get_audioPath());
from.renameTo(to);
}
else
super.update_id(id);
}
/** /**
* *
* @return true if it's a local pictogram * @return true if it's a local pictogram
...@@ -304,11 +336,12 @@ public class Picto extends Img { ...@@ -304,11 +336,12 @@ public class Picto extends Img {
* @return the associated person of a picto * @return the associated person of a picto
*/ */
public String get_user_avatar() { public String get_user_avatar() {
String associated_user = null; String associated_user;
try { try {
associated_user = this.attributes.getString(JSON_ATTTRS.USER_AVATAR); associated_user = this.attributes.has(JSON_ATTTRS.USER_AVATAR) ?this.attributes.getString(JSON_ATTTRS.USER_AVATAR) : null;
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
associated_user=null;
} }
return associated_user; return associated_user;
} }
...@@ -365,19 +398,30 @@ public class Picto extends Img { ...@@ -365,19 +398,30 @@ public class Picto extends Img {
* @return the uri of associated sound of the picto * @return the uri of associated sound of the picto
*/ */
public String getUriSound(){ public String getUriSound(){
String uri;
try { try {
return this.attributes.getString(JSON_ATTTRS.URI_SOUND); uri = this.attributes.has(JSON_ATTTRS.URI_SOUND) && !this.attributes.getString(JSON_ATTTRS.URI_SOUND).equals("null")
? this.attributes.getString(JSON_ATTTRS.URI_SOUND) : null;
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); uri=null;
Log.e(LOG_TAG,"Error getting URI sound from JSON:"+e.getMessage());
}
return uri;
}
public void setUriSound(String uriSound){
try {
this.attributes.put(JSON_ATTTRS.URI_SOUND,uriSound);
} catch (JSONException e) {
Log.e(LOG_TAG,"Error setting uri sound:"+e.getMessage());
} }
return null;
} }
/** /**
* *
* @return the uri of associated sound of the picto * @return the uri of associated sound of the picto
*/ */
public void setUriSound(String path){ public void ok(String path){
try { try {
this.attributes.put(JSON_ATTTRS.URI_SOUND, path); this.attributes.put(JSON_ATTTRS.URI_SOUND, path);
} catch (JSONException e) { } catch (JSONException e) {
...@@ -457,6 +501,7 @@ public class Picto extends Img { ...@@ -457,6 +501,7 @@ public class Picto extends Img {
public void set_local_status(boolean local) { public void set_local_status(boolean local) {
if (local) if (local)
try { try {
this.attributes.remove(JSON_ATTTRS.STUPICTO_ID);
this.attributes.put(JSON_ATTTRS.PCB_STATUS_MODIFICATION, true); this.attributes.put(JSON_ATTTRS.PCB_STATUS_MODIFICATION, true);
PCBcontext.getPcbdb().modifyPicto(this.get_id(), this.get_json_attrs()); PCBcontext.getPcbdb().modifyPicto(this.get_id(), this.get_json_attrs());
} catch (JSONException e) { } catch (JSONException e) {
...@@ -470,4 +515,25 @@ public class Picto extends Img { ...@@ -470,4 +515,25 @@ public class Picto extends Img {
} }
} }
/**
* Save an picto into disk
* @param is the stream where the image is available
* @throws IOException
*/
public void save_sound(InputStream is) throws IOException {
File file = new File(get_audioPath());
if (file.exists())
file.delete();
FileOutputStream os = new FileOutputStream(file);
int count;
byte buffer[]=new byte[1024];
while ((count = is.read(buffer)) != -1) {
os.write(buffer, 0, count);
}
os.flush();
os.close();
System.gc();
}
} }
...@@ -20,6 +20,7 @@ import org.json.JSONArray; ...@@ -20,6 +20,7 @@ import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.Iterator; import java.util.Iterator;
...@@ -255,7 +256,7 @@ public class Vocabulary implements Iterable<Picto> { ...@@ -255,7 +256,7 @@ public class Vocabulary implements Iterable<Picto> {
pictos.put(new Integer(picto.get_category()),pictos_cat); pictos.put(new Integer(picto.get_category()),pictos_cat);
} }
pictos_cat.add(picto); pictos_cat.add(picto);
imgs.add(new Img(picto.get_id(), picto.get_url(), Img.VOCABULARY)); imgs.add(picto);
} }
Log.d(this.getClass().getName(), "Vocabulary size: " + updated_collection.length); Log.d(this.getClass().getName(), "Vocabulary size: " + updated_collection.length);
ImgDownloader downloader = new ImgDownloader(PCBcontext.getContext(), imgListener,ImgDownloader.tsource.remote); ImgDownloader downloader = new ImgDownloader(PCBcontext.getContext(), imgListener,ImgDownloader.tsource.remote);
...@@ -273,7 +274,7 @@ public class Vocabulary implements Iterable<Picto> { ...@@ -273,7 +274,7 @@ public class Vocabulary implements Iterable<Picto> {
public void addPicto(Picto pic, ImgDownloader.tsource source, ImgDownloader.iImgDownloaderListener imgListener){ public void addPicto(Picto pic, ImgDownloader.tsource source, ImgDownloader.iImgDownloaderListener imgListener){
Vector<Img> imgs=new Vector<Img>(1); Vector<Img> imgs=new Vector<Img>(1);
imgs.add(new Img(pic.get_id(), pic.get_url(), Img.VOCABULARY)); imgs.add(pic);
ImgDownloader downloader = new ImgDownloader(PCBcontext.getContext(), imgListener,source); ImgDownloader downloader = new ImgDownloader(PCBcontext.getContext(), imgListener,source);
downloader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, imgs); downloader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, imgs);
...@@ -328,7 +329,7 @@ public class Vocabulary implements Iterable<Picto> { ...@@ -328,7 +329,7 @@ public class Vocabulary implements Iterable<Picto> {
* @return * @return
*/ */
public Picto get_picto(int pic_cat, int pic_id) { public Picto get_picto(int pic_cat, int pic_id) {
Picto picto=null; Picto picto=null; Log.e(LOG_TAG,"GET_PICTO:"+pic_cat+":"+Picto.NO_CATEGORY);
LinkedList<Picto> pictos_cat=this.pictos.get(pic_cat); LinkedList<Picto> pictos_cat=this.pictos.get(pic_cat);
for (int i=0; i<pictos_cat.size() && picto==null; i++) for (int i=0; i<pictos_cat.size() && picto==null; i++)
if (pictos_cat.get(i).get_id()==pic_id) picto=pictos_cat.get(i); if (pictos_cat.get(i).get_id()==pic_id) picto=pictos_cat.get(i);
...@@ -427,10 +428,10 @@ public class Vocabulary implements Iterable<Picto> { ...@@ -427,10 +428,10 @@ public class Vocabulary implements Iterable<Picto> {
/* /*
* It saves locally a new picto obtained from the PCB * It saves locally a new picto obtained from the PCB
*/ */
public void saveLocalPicto(String url, String exp, int cat, int coord_x, int coord_y, int free_category_coord_x, int free_category_coord_y,String uri_sound,String user_avatar, final iLocalPicto listener) { public void saveLocalPicto(String url, String exp, int cat, int coord_x, int coord_y, int free_category_coord_x, int free_category_coord_y,String user_avatar, String path_sound,final iLocalPicto listener) {
Picto prev_picto=PCBcontext.getPcbdb().getCurrentUser().has_categories() ? find_picto(cat, coord_x,coord_y) : find_picto(coord_x,coord_y); //¿estamos reemplazanddo un picto que ya existe? Picto prev_picto=PCBcontext.getPcbdb().getCurrentUser().has_categories() ? find_picto(cat, coord_x,coord_y) : find_picto(free_category_coord_x,free_category_coord_y); //¿estamos reemplazanddo un picto que ya existe?
if (prev_picto!=null) { //El picto ya existe if (prev_picto!=null) { //El picto ya existe
removePicto(prev_picto.get_category(),prev_picto.get_id()); //borramos el picto local actual removePicto(prev_picto.get_category(),prev_picto.get_id()); //borramos el picto local actual
...@@ -439,7 +440,10 @@ public class Vocabulary implements Iterable<Picto> { ...@@ -439,7 +440,10 @@ public class Vocabulary implements Iterable<Picto> {
int id=PCBcontext.getDevice().getNextLocalPictoID(); int id=PCBcontext.getDevice().getNextLocalPictoID();
try { try {
final Picto picto = new Picto(id, url, exp, cat, coord_x, coord_y, free_category_coord_x, free_category_coord_y,prev_picto!=null ? prev_picto.get_stupicto_id() : Picto.STUPICTO_NULL,uri_sound,user_avatar); final Picto picto = new Picto(id, url, exp, cat, coord_x, coord_y, free_category_coord_x, free_category_coord_y,prev_picto!=null ? prev_picto.get_stupicto_id() : Picto.STUPICTO_NULL,user_avatar);
if (path_sound!=null)
new File(path_sound).renameTo(new File(picto.get_audioPath()));
addPicto(picto, ImgDownloader.tsource.local, new ImgDownloader.iImgDownloaderListener() { addPicto(picto, ImgDownloader.tsource.local, new ImgDownloader.iImgDownloaderListener() {
@Override @Override
public void loadComplete() { public void loadComplete() {
......
...@@ -7,6 +7,7 @@ import android.os.AsyncTask; ...@@ -7,6 +7,7 @@ import android.os.AsyncTask;
import android.util.Log; import android.util.Log;
import com.yottacode.pictogram.R; import com.yottacode.pictogram.R;
import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.tools.Img; import com.yottacode.pictogram.tools.Img;
import java.io.File; import java.io.File;
...@@ -51,6 +52,23 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> { ...@@ -51,6 +52,23 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> {
protected void onPreExecute() { protected void onPreExecute() {
} }
private InputStream getStreamImg(Img img) throws IOException {
String surl = context.getResources().getString(R.string.server) + "/" + img.get_url();
URL url = new URL(surl);
URLConnection ucon = url.openConnection();
return ucon.getInputStream();
}
private void downloadSoundImage(Picto picto)throws IOException {
String surl = context.getResources().getString(R.string.server) + "/" + picto.getUriSound();
URL url = new URL(surl);
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
picto.save_sound(is);
if (is != null) is.close();
}
protected Img doInBackground( Vector<Img> imgs) { protected Img doInBackground( Vector<Img> imgs) {
InputStream is=null; InputStream is=null;
...@@ -58,21 +76,21 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> { ...@@ -58,21 +76,21 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> {
Log.d(this.getClass().getCanonicalName(), "Required images: " + imgs.size()); Log.d(this.getClass().getCanonicalName(), "Required images: " + imgs.size());
this.current= ImgDownloader.status.downloading; this.current= ImgDownloader.status.downloading;
int i=0,j=0,allsize=0; int i=0,j=0,allsize=0,isound=0;
Long availableMegs = mi.availMem / 1048576L; Long availableMegs = mi.availMem / 1048576L;
int seconds = Calendar.getInstance().get(Calendar.SECOND); int seconds = Calendar.getInstance().get(Calendar.SECOND);
try { try {
;
for (Img img: imgs) { for (Img img: imgs) {
if (!img.exists_bitmap(this.context) || this.force_download || this.source==source.local) try { if (!img.exists_bitmap(this.context) || this.force_download || this.source==source.local) try {
this.activityManager.getMemoryInfo(mi); this.activityManager.getMemoryInfo(mi);
if (this.source==source.remote) { if (this.source==source.remote) {
String surl = context.getResources().getString(R.string.server) + "/" + img.get_url(); is=getStreamImg(img);
URL url = new URL(surl);
URLConnection ucon = url.openConnection();
is = ucon.getInputStream(); }
}else { else {
File file=new File(img.get_url()); File file=new File(img.get_url());
is=new FileInputStream(file); is=new FileInputStream(file);
} }
...@@ -86,10 +104,18 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> { ...@@ -86,10 +104,18 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> {
} finally { } finally {
if (is != null) is.close(); if (is != null) is.close();
} }
if (img instanceof Picto) {
Picto picto = (Picto) img;
if (picto.getUriSound() != null) {
downloadSoundImage(picto);
isound++;
}
}
} }
this.current= status.downloaded_ok; this.current= status.downloaded_ok;
} catch (IOException e) { } catch (IOException e) {
Log.d(this.getClass().getCanonicalName(), "Error: " + e); Log.e(this.getClass().getCanonicalName(), "Error: " + e);
this.current= status.downloaded_failed; this.current= status.downloaded_failed;
} }
seconds=Calendar.getInstance().get(Calendar.SECOND)-seconds; seconds=Calendar.getInstance().get(Calendar.SECOND)-seconds;
...@@ -98,6 +124,7 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> { ...@@ -98,6 +124,7 @@ public class ImgDownloader extends AsyncTask<Vector<Img>, Void, Img> {
". Cached: "+ (imgs.size()-i)+"/"+imgs.size()+ ". Cached: "+ (imgs.size()-i)+"/"+imgs.size()+
". Download failed: "+ j+"/"+imgs.size()+ ". Download failed: "+ j+"/"+imgs.size()+
". Memory required:"+((mi.availMem / 1048576L)-availableMegs)+" MB"+ ". Memory required:"+((mi.availMem / 1048576L)-availableMegs)+" MB"+
". Sounds downloaded:"+isound+
". Used time: "+seconds+" seconds at "+new SimpleDateFormat("HH:mm:ss")); ". Used time: "+seconds+" seconds at "+new SimpleDateFormat("HH:mm:ss"));
return imgs.size() > 1 ? null return imgs.size() > 1 ? null
......
...@@ -2,6 +2,7 @@ package com.yottacode.pictogram.tts; ...@@ -2,6 +2,7 @@ package com.yottacode.pictogram.tts;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.content.Context; import android.content.Context;
import android.media.SoundPool;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech;
...@@ -10,6 +11,10 @@ import android.speech.tts.Voice; ...@@ -10,6 +11,10 @@ import android.speech.tts.Voice;
import android.util.Log; import android.util.Log;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
...@@ -22,13 +27,15 @@ import java.util.Set; ...@@ -22,13 +27,15 @@ import java.util.Set;
*/ */
public class TTSHelper { public class TTSHelper {
private static final String LOG_TAG = TTSHelper.class.getName();
TextToSpeech ttobj=null; TextToSpeech ttobj=null;
Voice voice; SoundPool sp=null;
Hashtable<String, Integer> recorded_sounds=null;
boolean voice_ok; boolean voice_ok;
public void createTTS(final Context context, String engine, final Locale locale, final String voice) { public void createTTS(final Context context, String engine, final Locale locale, final String voice) {
if (this.ttobj==null) { if (this.ttobj == null) {
this.ttobj = new TextToSpeech(context, new TextToSpeech.OnInitListener() { this.ttobj = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
public void onInit(int status) { public void onInit(int status) {
Log.e(this.getClass().getCanonicalName(), "TTS engine " + status); Log.e(this.getClass().getCanonicalName(), "TTS engine " + status);
...@@ -40,8 +47,11 @@ public class TTSHelper { ...@@ -40,8 +47,11 @@ public class TTSHelper {
} }
}, engine); }, engine);
} }
if (sp == null) {
} sp = new SoundPool.Builder().build();
recorded_sounds = new Hashtable<>(3);
}
}
public TTSHelper(Context context, String engine, Locale locale,String voice) { public TTSHelper(Context context, String engine, Locale locale,String voice) {
createTTS(context ,engine,locale,voice); createTTS(context ,engine,locale,voice);
} }
...@@ -142,4 +152,35 @@ public class TTSHelper { ...@@ -142,4 +152,35 @@ public class TTSHelper {
params.putString(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "TAPE_READ"); params.putString(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "TAPE_READ");
ttobj.speak(input, TextToSpeech.QUEUE_FLUSH, params, "TAPE_READ"); ttobj.speak(input, TextToSpeech.QUEUE_FLUSH, params, "TAPE_READ");
} }
private void addRecord(final File mp3) {
try {
final FileInputStream fis = new FileInputStream(mp3);
sp.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool sp, int sampleId, int status) {
TTSHelper.this.recorded_sounds.put(mp3.getAbsolutePath(),new Integer(sampleId));
playRecord(mp3);
try {
fis.close();
} catch (IOException e) {
Log.e(LOG_TAG,"Error playing audio "+mp3.getAbsolutePath());
}
}
});
sp.load(fis.getFD(),0,mp3.length(),1);
} catch (Exception e) {
Log.e(LOG_TAG,"READING MP3 ERROR "+e.getMessage());
e.printStackTrace();
}
}
public void playRecord(final File mp3) {
Integer mp3id=this.recorded_sounds.get(mp3.getAbsolutePath());
if (mp3id==null)
addRecord(mp3);
else
sp.play(mp3id.intValue(), 1, 1, 1, 0, 1);
}
} }
...@@ -24,6 +24,7 @@ public class PictoMenu { ...@@ -24,6 +24,7 @@ public class PictoMenu {
public static final String IS_EDIT = "is_edit"; public static final String IS_EDIT = "is_edit";
public static final String PATH = "pathImage"; public static final String PATH = "pathImage";
public static final String IMAGE_PICTO = "imagePicto"; public static final String IMAGE_PICTO = "imagePicto";
public static final String PATH_SOUND = "pathSound";
PictogramActivity activity; PictogramActivity activity;
...@@ -102,7 +103,7 @@ public class PictoMenu { ...@@ -102,7 +103,7 @@ public class PictoMenu {
} }
public void setPicto(int row, int col, int cat, Bitmap bitmap, int id_picto){ public void setPicto(int row, int col, int free_row, int free_col, int cat, Bitmap bitmap, int id_picto){
Intent intent = new Intent(activity, EditPictoActivity.class); Intent intent = new Intent(activity, EditPictoActivity.class);
intent.putExtra(ID_PICTO_IMAGE,id_picto); intent.putExtra(ID_PICTO_IMAGE,id_picto);
...@@ -112,8 +113,9 @@ public class PictoMenu { ...@@ -112,8 +113,9 @@ public class PictoMenu {
intent.putExtra(Picto.JSON_ATTTRS.ROW, row); intent.putExtra(Picto.JSON_ATTTRS.ROW, row);
intent.putExtra(Picto.JSON_ATTTRS.COLUMN, col); intent.putExtra(Picto.JSON_ATTTRS.COLUMN, col);
} else { } else {
intent.putExtra(Picto.JSON_ATTTRS.FREE_ROW, row); intent.putExtra(Picto.JSON_ATTTRS.CATEGORY, Picto.NO_CATEGORY);
intent.putExtra(Picto.JSON_ATTTRS.FREE_COLUMN, col); intent.putExtra(Picto.JSON_ATTTRS.FREE_ROW, free_row);
intent.putExtra(Picto.JSON_ATTTRS.FREE_COLUMN, free_col);
} }
/*ByteArrayOutputStream stream = new ByteArrayOutputStream(); /*ByteArrayOutputStream stream = new ByteArrayOutputStream();
...@@ -280,7 +282,7 @@ public class PictoMenu { ...@@ -280,7 +282,7 @@ public class PictoMenu {
ll.removeAllViewsInLayout(); ll.removeAllViewsInLayout();
try { try {
setPicto(p.get_row(),p.get_column(),p.get_category(),p.get_bitmap(PCBcontext.getContext()),p.get_id()); setPicto(p.get_row(),p.get_column(),p.getFreeRow(),p.getFreeColumn(), p.get_category(),p.get_bitmap(PCBcontext.getContext()),p.get_id());
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
......
...@@ -62,6 +62,7 @@ import com.yottacode.tools.GUITools; ...@@ -62,6 +62,7 @@ import com.yottacode.tools.GUITools;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
...@@ -159,6 +160,7 @@ public class PictogramActivity extends Activity implements VocabularyTalk.iVocab ...@@ -159,6 +160,7 @@ public class PictogramActivity extends Activity implements VocabularyTalk.iVocab
public void action(action action, int picto_cat, int picto_id) { public void action(action action, int picto_cat, int picto_id) {
Log.i(this.getClass().getCanonicalName(), action + " from " + picto_cat + "," + picto_id + " catched"); Log.i(this.getClass().getCanonicalName(), action + " from " + picto_cat + "," + picto_id + " catched");
if (action==ActionTalk.iActionListener.action.show) { if (action==ActionTalk.iActionListener.action.show) {
Log.i(LOG_TAG,"show message received:"+action.toString());
} }
else if (PCBcontext.getPcbdb().getCurrentUser().is_mirror_on()) { else if (PCBcontext.getPcbdb().getCurrentUser().is_mirror_on()) {
Picto picto = vocabulary.get_picto(picto_cat, picto_id); Picto picto = vocabulary.get_picto(picto_cat, picto_id);
...@@ -393,7 +395,6 @@ public class PictogramActivity extends Activity implements VocabularyTalk.iVocab ...@@ -393,7 +395,6 @@ public class PictogramActivity extends Activity implements VocabularyTalk.iVocab
@Override @Override
protected void onPause() { protected void onPause() {
Log.e(this.LOG_TAG,"ONPAUSE");
super.onPause(); super.onPause();
this.pictoCategoryGridAdapter.allPictosInGrid(); this.pictoCategoryGridAdapter.allPictosInGrid();
this.pictoMainGridAdapter.allPictosInGrid(); this.pictoMainGridAdapter.allPictosInGrid();
...@@ -409,7 +410,6 @@ public class PictogramActivity extends Activity implements VocabularyTalk.iVocab ...@@ -409,7 +410,6 @@ public class PictogramActivity extends Activity implements VocabularyTalk.iVocab
@Override @Override
protected void onDestroy() { protected void onDestroy() {
Log.e(LOG_TAG, "destroy Pictogram Activity");
super.onDestroy(); super.onDestroy();
if (tts != null) { if (tts != null) {
tts.destroy(); tts.destroy();
...@@ -819,8 +819,14 @@ public class PictogramActivity extends Activity implements VocabularyTalk.iVocab ...@@ -819,8 +819,14 @@ public class PictogramActivity extends Activity implements VocabularyTalk.iVocab
tapeAdapter.notifyDataSetChanged(); tapeAdapter.notifyDataSetChanged();
showPictoMainGridView(); showPictoMainGridView();
PCBcontext.getActionLog().log(new TalkAction(TalkAction.ADD, p)); PCBcontext.getActionLog().log(new TalkAction(TalkAction.ADD, p));
if (PictogramActivity.this.feedback_read && !PictogramActivity.this.tapeAdapter.play() && !p.is_category()) if (PictogramActivity.this.feedback_read && !PictogramActivity.this.tapeAdapter.play() && !p.is_category()) {
PictogramActivity.this.tts.play(p.get_translation()); File audioFile = p.get_audioFile();
Log.e(LOG_TAG,"AUDIO:"+(audioFile!=null)+":"+p.get_audioPath());
if (audioFile != null)
PictogramActivity.this.tts.playRecord(audioFile);
else
PictogramActivity.this.tts.play(p.get_translation());
}
if (PictogramActivity.this.feedback_highlight) execHighligthFeeback(p, false); if (PictogramActivity.this.feedback_highlight) execHighligthFeeback(p, false);
} }
...@@ -1157,7 +1163,7 @@ protected void showOnlyTape(boolean onlyTape) { ...@@ -1157,7 +1163,7 @@ protected void showOnlyTape(boolean onlyTape) {
int freeRow = edit ? data.getExtras().getInt(Picto.JSON_ATTTRS.FREE_ROW) : getIntent().getIntExtra(Picto.JSON_ATTTRS.FREE_ROW, -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); int freeColumn = edit ? data.getExtras().getInt(Picto.JSON_ATTTRS.FREE_COLUMN) : getIntent().getIntExtra(Picto.JSON_ATTTRS.FREE_COLUMN, -1);
String uri_sound = data.getExtras().getString(Picto.JSON_ATTTRS.URI_SOUND); String path_sound = data.getExtras().getString(PictoMenu.PATH_SOUND);
String user_avatar = data.getExtras().getString(Picto.JSON_ATTTRS.USER_AVATAR); String user_avatar = data.getExtras().getString(Picto.JSON_ATTTRS.USER_AVATAR);
int cat = edit ? data.getIntExtra(Picto.JSON_ATTTRS.CATEGORY, -1) : getIntent().getIntExtra(Picto.JSON_ATTTRS.CATEGORY, -1); int cat = edit ? data.getIntExtra(Picto.JSON_ATTTRS.CATEGORY, -1) : getIntent().getIntExtra(Picto.JSON_ATTTRS.CATEGORY, -1);
...@@ -1165,10 +1171,8 @@ protected void showOnlyTape(boolean onlyTape) { ...@@ -1165,10 +1171,8 @@ protected void showOnlyTape(boolean onlyTape) {
String path = data.getExtras().getString(PictoMenu.PATH); String path = data.getExtras().getString(PictoMenu.PATH);
String legend = data.getExtras().getString(Picto.JSON_ATTTRS.EXPRESSION); String legend = data.getExtras().getString(Picto.JSON_ATTTRS.EXPRESSION);
Log.i(EditPictoActivity.DEBUG_MESSAGE,"Antes de chooseText...DATOS--> ASS_PERSON: "+user_avatar+"..URI_SOUND: "+uri_sound+"..PATH_IMAGE: "+path+"..EXPRESION: "+legend);
//TODO: COGER URI DEL SONIDO,EL USER AVATAR Y LA PERSONA ASOCIADA AL PICTO chooseTextAndSavePicto(path, row, col, freeRow, freeColumn, cat, legend, path_sound ,user_avatar);
chooseTextAndSavePicto(path, row, col, freeRow, freeColumn, cat, legend, uri_sound,user_avatar);
refresh(); refresh();
} }
break; break;
...@@ -1180,25 +1184,27 @@ protected void showOnlyTape(boolean onlyTape) { ...@@ -1180,25 +1184,27 @@ protected void showOnlyTape(boolean onlyTape) {
* función para la edición de un texto asociado a una nueva imagen y guardar el nuevo picto * 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, 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 uri_sound,final String user_avatar) { final int category, final String legend,final String path_sound ,final String user_avatar) {
// Set up the buttons // Set up the buttons
int cat = category != -1 ? category : Picto.NO_CATEGORY;
Log.i(LOG_TAG,"Uploading "+legend+" at row "+"row"+", col "+col); Log.i(LOG_TAG,"Uploading "+legend+" at row "+row+"/"+freeRow+", col "+col+"/"+freeColumn+" sound "+path_sound );
PCBcontext.getVocabulary().saveLocalPicto( PCBcontext.getVocabulary().saveLocalPicto(
selectedImagePath, selectedImagePath,
legend, legend,
cat, category,
row, row,
col, col,
freeRow, freeRow,
freeColumn, freeColumn,
uri_sound,
user_avatar, user_avatar,
path_sound,
new iLocalPicto() { new iLocalPicto() {
@Override @Override
public void saved(Picto localPicto) { public void saved(Picto localPicto) {
refresh(); refresh();
try { try {
if (PCBcontext.is_user_online()) if (PCBcontext.is_user_online())
......
...@@ -2,11 +2,13 @@ package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper; ...@@ -2,11 +2,13 @@ package com.yottacode.pictogram.tabletlibrary.gui.communicator.cropper;
import android.Manifest; import android.Manifest;
import android.app.Activity; import android.app.Activity;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.database.Cursor; import android.database.Cursor;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Point; import android.graphics.Point;
import android.media.AudioManager;
import android.media.MediaActionSound; import android.media.MediaActionSound;
import android.media.MediaPlayer; import android.media.MediaPlayer;
import android.media.MediaRecorder; import android.media.MediaRecorder;
...@@ -67,6 +69,7 @@ import static java.lang.Thread.sleep; ...@@ -67,6 +69,7 @@ import static java.lang.Thread.sleep;
public class EditPictoActivity extends Activity { public class EditPictoActivity extends Activity {
private static final CharSequence NO_SUP_TEXT = "____________"; private static final CharSequence NO_SUP_TEXT = "____________";
private static final String LOG_TAG = EditPictoActivity.class.getName();
Picto p; Picto p;
private boolean editar; private boolean editar;
Random nRandom = new Random(); Random nRandom = new Random();
...@@ -178,7 +181,6 @@ public class EditPictoActivity extends Activity { ...@@ -178,7 +181,6 @@ public class EditPictoActivity extends Activity {
tiempoTotal = tiempoGrabado-1; tiempoTotal = tiempoGrabado-1;
barraReproducir.setMax(tiempoTotal); barraReproducir.setMax(tiempoTotal);
botonGrabar.PhidePressedRing(); botonGrabar.PhidePressedRing();
Log.i(DEBUG_MESSAGE,"Fin Grabacion.."+tiempoGrabado);
if(tiempoGrabado>1) hayGrabacion = true ; if(tiempoGrabado>1) hayGrabacion = true ;
else hayGrabacion = false; else hayGrabacion = false;
reiniciarGrabacion(); reiniciarGrabacion();
...@@ -215,7 +217,6 @@ public class EditPictoActivity extends Activity { ...@@ -215,7 +217,6 @@ public class EditPictoActivity extends Activity {
protected void onCancelled(){ protected void onCancelled(){
stopPlaying(); stopPlaying();
reiniciarReproducción(); reiniciarReproducción();
Log.i(DEBUG_MESSAGE,"Fin Reproducion..");
} }
} }
...@@ -293,8 +294,7 @@ public class EditPictoActivity extends Activity { ...@@ -293,8 +294,7 @@ public class EditPictoActivity extends Activity {
fileImage.mkdirs(); fileImage.mkdirs();
} }
dirAudioPath = Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_MUSIC; dirAudioPath = Picto.getAudioPictosPath();
dirAudioPath += "/PictoAudio";
File fileAudio = new File(dirAudioPath); File fileAudio = new File(dirAudioPath);
if(!fileAudio.exists()){ if(!fileAudio.exists()){
fileAudio.mkdirs(); fileAudio.mkdirs();
...@@ -445,7 +445,6 @@ public class EditPictoActivity extends Activity { ...@@ -445,7 +445,6 @@ public class EditPictoActivity extends Activity {
dirAudioPath + File.separator + legend.getText().toString() + "_new_" + pathNumber + "_audio.mp3"); dirAudioPath + File.separator + legend.getText().toString() + "_new_" + pathNumber + "_audio.mp3");
if (from.exists()){ if (from.exists()){
from.renameTo(to); from.renameTo(to);
Log.i(DEBUG_MESSAGE,to.getPath().toString());
audioPath = to.getPath().toString(); audioPath = to.getPath().toString();
} }
} }
...@@ -455,7 +454,8 @@ public class EditPictoActivity extends Activity { ...@@ -455,7 +454,8 @@ public class EditPictoActivity extends Activity {
Intent intent = getIntent(); //Mandar a pictogram activity el path y el texto de la imagen Intent intent = getIntent(); //Mandar a pictogram activity el path y el texto de la imagen
intent.putExtra(PictoMenu.IS_EDIT, editar); //Para saber despues si estas editando o añadiendo nuevo y coger los datos de intent o de data en OnActivityResult intent.putExtra(PictoMenu.IS_EDIT, editar); //Para saber despues si estas editando o añadiendo nuevo y coger los datos de intent o de data en OnActivityResult
intent.putExtra(PictoMenu.PATH, filepath); //Mandar Path imagen intent.putExtra(PictoMenu.PATH, filepath); //Mandar Path imagen
intent.putExtra(Picto.JSON_ATTTRS.URI_SOUND,audioPath); //Mandar el path del audio intent.putExtra(PictoMenu.PATH_SOUND,audioPath); //Mandar el path del audio
Log.e(LOG_TAG, "PATH SOUND:"+audioPath);
intent.putExtra(Picto.JSON_ATTTRS.EXPRESSION, legend.getText().toString()); //Mandar expresion nueva intent.putExtra(Picto.JSON_ATTTRS.EXPRESSION, legend.getText().toString()); //Mandar expresion nueva
intent.putExtra(Picto.JSON_ATTTRS.CATEGORY, getIntent().getIntExtra(Picto.JSON_ATTTRS.CATEGORY, -1)); intent.putExtra(Picto.JSON_ATTTRS.CATEGORY, getIntent().getIntExtra(Picto.JSON_ATTTRS.CATEGORY, -1));
intent.putExtra(Picto.JSON_ATTTRS.USER_AVATAR, supAsociado.getText().equals(NO_SUP_TEXT)?null:supAsociado.getText()); intent.putExtra(Picto.JSON_ATTTRS.USER_AVATAR, supAsociado.getText().equals(NO_SUP_TEXT)?null:supAsociado.getText());
...@@ -584,7 +584,7 @@ public class EditPictoActivity extends Activity { ...@@ -584,7 +584,7 @@ public class EditPictoActivity extends Activity {
super.onRequestPermissionsResult(requestCode, permissions, grantResults); super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){ switch (requestCode){
case REQUEST_RECORD_AUDIO_PERMISSION: case REQUEST_RECORD_AUDIO_PERMISSION:
permissionToRecordAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED; permissionToRecordAccepted = grantResults.length==0 || grantResults[0] == PackageManager.PERMISSION_GRANTED;
break; break;
} }
if (!permissionToRecordAccepted ) finish(); if (!permissionToRecordAccepted ) finish();
...@@ -612,6 +612,9 @@ public class EditPictoActivity extends Activity { ...@@ -612,6 +612,9 @@ public class EditPictoActivity extends Activity {
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
AudioManager myAudioMgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int nativeSampleRate = Integer.parseInt(myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE));
mRecorder.setAudioSamplingRate(nativeSampleRate);
mRecorder.setOutputFile(previewAudioPath); mRecorder.setOutputFile(previewAudioPath);
......
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