working on PictogramActivity refactorization

(class PictoMenu created regarding radial menu)
parent ac2bd08a
package com.yottacode.pictogram.tabletlibrary.gui.communicator;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.text.InputType;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.yottacode.pictogram.action.VocabularyAction;
import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.grammar.Vocabulary;
import com.yottacode.pictogram.grammar.iLocalPicto;
import com.yottacode.pictogram.net.PictoUploader;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tools.PCBcontext;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static android.graphics.Color.BLACK;
import static android.graphics.Color.argb;
import static android.graphics.Color.rgb;
/**
* Created by Fernando on 23/01/2017.
*/
public class PictoMenu {
PictogramActivity activity;
//Variables used on the picto menu (only supervisors)
private RadialMenuWidget PieMenu;
private ImageView detail;
private RelativeLayout ll;
// TODO describe this variable
static final int SELECT_PICTURE = 1;
public PictoMenu(PictogramActivity activity) {
this.activity=activity;
}
/**
* add a local picto from pcb
*
* @param row
* @param col
*/
public void addPicto(int row, int col) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
if (PCBcontext.getPcbdb().getCurrentUser().has_categories()) {
activity.getIntent().putExtra(Picto.JSON_ATTTRS.ROW, row);
activity.getIntent().putExtra(Picto.JSON_ATTTRS.COLUMN, col);
} else {
activity.getIntent().putExtra(Picto.JSON_ATTTRS.FREE_ROW, row);
activity.getIntent().putExtra(Picto.JSON_ATTTRS.FREE_COLUMN, col);
}
activity.startActivityForResult(intent, SELECT_PICTURE);
}
/**
* 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) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(activity.getResources().getString(R.string.enterImgLabel));
// Set up the input
final EditText input = new EditText(activity);
input.setInputType(InputType.TYPE_CLASS_TEXT);
builder.setView(input);
// Set up the buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int cat = activity.currentCategory != null
? activity.currentCategory.get_id()
: Picto.NO_CATEGORY;
PCBcontext.getVocabulary().saveLocalPicto(
selectedImagePath,
input.getText().toString(),
cat,
row,
col,
freeRow,
freeColumn,
new iLocalPicto() {
@Override
public void saved(Picto localPicto) {
activity.refresh();
try {
if (PCBcontext.is_user_online())
new PictoUploader(localPicto).upload(activity);
} catch (IOException e) {
Log.e(Vocabulary.class.getCanonicalName(), e.getMessage());
}
}
});
}
});
builder.show();
}
/**
* Función para la selección de una foto del carrete
*
* @param requestCode
* @param resultCode
* @param data
*/
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
String selectedImagePath;
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
int row = activity.getIntent().getIntExtra(Picto.JSON_ATTTRS.ROW, -1);
int col = activity.getIntent().getIntExtra(Picto.JSON_ATTTRS.COLUMN, -1);
int freeRow = activity.getIntent().getIntExtra(Picto.JSON_ATTTRS.FREE_ROW, -1);
int freeColumn = activity.getIntent().getIntExtra(Picto.JSON_ATTTRS.FREE_COLUMN, -1);
Log.i(activity.getClass().getCanonicalName(), "0 Picto x y " + " " + row + " " + col);
activity.getIntent().removeExtra(Picto.JSON_ATTTRS.ROW);
activity.getIntent().removeExtra(Picto.JSON_ATTTRS.COLUMN);
activity.getIntent().removeExtra(Picto.JSON_ATTTRS.FREE_ROW);
activity.getIntent().removeExtra(Picto.JSON_ATTTRS.FREE_COLUMN);
chooseTextAndSavePicto(selectedImagePath, row, col, freeRow, freeColumn);
}
}
}
/**
* Función para la selección de una foto del carrete
*
* @param uri
* @return
*/
static public String getPath(Uri uri) {
if (uri == null) {
return null;
}
// this will only work for images selected from gallery
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = PCBcontext.getContext().getContentResolver().query(uri, projection, null, null, null);
if (cursor != null) {
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
return uri.getPath();
}
/**Function for open a new View for change the expression of a picto
*
* @param picto
*/
public void createViewForExpression(final Picto picto){
ll = new RelativeLayout(PCBcontext.getContext());
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
activity.addContentView(ll, params);
ll.setBackgroundColor(argb(180,0,0,0));
ll.setClickable(false);
//Parameters for hide navigation bar when u save or cancel
final View decorView = activity.getWindow().getDecorView();
final int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
/*| View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE*/;
final EditText leyenda = new EditText(PCBcontext.getContext());
leyenda.setBackgroundColor(rgb(221, 221, 211));
leyenda.setWidth(400);
leyenda.setMaxLines(1);
leyenda.setClickable(true);
leyenda.setTextSize(25);
leyenda.setX(activity.getResources().getDisplayMetrics().widthPixels/2 - 300);
leyenda.setY(activity.getResources().getDisplayMetrics().heightPixels/2 - 50);
leyenda.setTextColor(BLACK);
if(picto.get_translation()!= null && picto != null){
leyenda.setText(picto.get_translation());
}else{
leyenda.setText("Sin Descripción");
}
//Mostrar teclado automaticamente
final InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
ImageButton botonOk = new ImageButton(PCBcontext.getContext());
botonOk.setImageResource(android.R.drawable.ic_menu_save);
botonOk.setX(activity.getResources().getDisplayMetrics().widthPixels/2 + 110);
botonOk.setY(activity.getResources().getDisplayMetrics().heightPixels/2 - 50);
botonOk.setBackgroundColor(rgb(221,221,221));
botonOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
picto.set_translation(leyenda.getText().toString());
imm.hideSoftInputFromWindow(leyenda.getWindowToken(), 0);
picto.set_local_status(true);
if (!picto.is_local()) {
new PictoUploader(picto).uploadState();
PCBcontext.getActionLog().log(new VocabularyAction(VocabularyAction.ALTERATTRS, picto));
}
activity.getCurrentPictoGridAdapter().notifyDataSetChanged();
ll.setVisibility(View.GONE);
ll.removeAllViewsInLayout();
//Hide navigation bar
//activity.refresh();
decorView.setSystemUiVisibility(uiOptions);
}
});
ImageButton botonSalir = new ImageButton(PCBcontext.getContext());
botonSalir.setImageResource(android.R.drawable.ic_menu_close_clear_cancel);
botonSalir.setX(activity.getResources().getDisplayMetrics().widthPixels/2 + 150);
botonSalir.setY(activity.getResources().getDisplayMetrics().heightPixels/2 - 50);
botonSalir.setBackgroundColor(rgb(221,221,221));
botonSalir.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imm.hideSoftInputFromWindow(leyenda.getWindowToken(), 0);
ll.setVisibility(View.GONE);
ll.removeAllViewsInLayout();
//Hide navigation bar
//activity.refresh();
decorView.setSystemUiVisibility(uiOptions);
}
});
ll.addView(leyenda);
ll.addView(botonOk);
ll.addView(botonSalir);
leyenda.requestFocus();
imm.showSoftInput(leyenda, InputMethodManager.SHOW_FORCED);
}
/**Function for build a radial menu
*
* @param is_picto_big
* @param picto
*/
public void createMenuForPicto(boolean is_picto_big, Picto picto){
ll = new RelativeLayout(PCBcontext.getContext());
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
activity.addContentView(ll, params);
ll.setBackgroundColor(argb(180,0,0,0));
detail = new ImageView(PCBcontext.getContext());
int centerX = activity.getResources().getDisplayMetrics().widthPixels/2;
int centerY = activity.getResources().getDisplayMetrics().heightPixels/2;
if(!is_picto_big){
centerY += 100;
detail.setMaxWidth(90);
}else{
centerY += 135;
detail.setMaxWidth(115);
}
PieMenu = new RadialMenuWidget(PCBcontext.getContext());
PieMenu.setAnimationSpeed(0L);
PieMenu.setCenterLocation(centerX - (PieMenu.getcRadius()*2) - 50, centerY-(PieMenu.getcRadius()*2));
PieMenu.setIconSize(20,35); //Tamaño del icono
PieMenu.setCenterCircle(new Close(picto));
PieMenu.addMenuEntry(new UnlockPictoMenu(picto));
PieMenu.addMenuEntry(new DisablePictoMenu(picto));
PieMenu.addMenuEntry(new SetInvisibleMenu(picto));
//PieMenu.addMenuEntry(new EditMenu(picto));
ll.addView(PieMenu);
try {
detail.setImageBitmap(picto.get_bitmap(PCBcontext.getContext()));
detail.setBackgroundColor(picto.get_color());
detail.setX(centerX+10);
detail.setY(centerY - (picto.get_bitmap(PCBcontext.getContext()).getHeight()));
} catch (IOException e) {
e.printStackTrace();
}
ll.addView(detail);
}
/** Menu of picto classes */
//Close menu button
public class Close implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public Close(Picto picto){
p = picto;
}
public String getName() { return "Close"; }
public String getLabel() { return null; }
public int getIcon() { return android.R.drawable.ic_menu_close_clear_cancel; }
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return null; }
//Metodo para realizar acciones si se pulsa
public void menuActiviated()
{
ll.setVisibility(View.GONE);
((RelativeLayout)PieMenu.getParent()).removeView(PieMenu);
}
public void menuDisabled(){}
}
//Disable menu button
public class DisablePictoMenu implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public DisablePictoMenu(Picto picto){
p = picto;
}
public String getName() { return "disable"; }
public String getLabel() { return null; }
public int getIcon() { return R.drawable.disabled_picto; }
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return null; }
public void menuActiviated()
{
p.alter_status("disabled");
activity.getCurrentPictoGridAdapter().notifyDataSetChanged();
ll.setVisibility(View.GONE);
((RelativeLayout)PieMenu.getParent()).removeView(PieMenu);
}
public void menuDisabled(){}
}
//Change image of picto menu button
public class SetInvisibleMenu implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public SetInvisibleMenu(Picto picto){
p = picto;
}
public String getName() { return "invisible"; }
public String getLabel() { return null; }
public int getIcon() { return R.drawable.eye_blocked; }
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return null; }
public void menuActiviated()
{
p.alter_status("invisible");
activity.getCurrentPictoGridAdapter().notifyDataSetChanged();
ll.setVisibility(View.GONE);
((RelativeLayout)PieMenu.getParent()).removeView(PieMenu);
}
public void menuDisabled(){}
}
//Activate/enable picto on vocabulary menu button
public class UnlockPictoMenu implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public UnlockPictoMenu(Picto picto){
p = picto;
}
public String getName() { return "enable"; }
public String getLabel() { return null; }
public int getIcon() { return R.drawable.unlock; }
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return null; }
public void menuActiviated()
{
p.alter_status("enabled");
activity.getCurrentPictoGridAdapter().notifyDataSetChanged();
ll.setVisibility(View.GONE);
((RelativeLayout)PieMenu.getParent()).removeView(PieMenu);
}
public void menuDisabled(){}
}
//Edit menu button
public class EditMenu implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public EditMenu(Picto picto){
p = picto;
}
public String getName() { return "edit"; }
public String getLabel() { return null; }
public int getIcon() { return R.drawable.edit; }
private List<RadialMenuWidget.RadialMenuEntry> children;
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return children; }
public void menuActiviated()
{
ll.getChildAt(1).setX(ll.getChildAt(1).getX() + 30);
children = new ArrayList<>(Arrays.asList(new EditTextPicto(p),new EditImage(p)));
}
public void menuDisabled(){
ll.getChildAt(1).setX(ll.getChildAt(1).getX() - 30);
}
}
//Edit legend text of picto button
public class EditTextPicto implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public EditTextPicto(Picto picto){
p = picto;
}
public String getName() { return "editText"; }
public String getLabel() { return null; }
public int getIcon() { return R.drawable.edit_text; }
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return null; }
public void menuActiviated()
{
ll.setVisibility(View.GONE);
ll.removeAllViewsInLayout();
createViewForExpression(p);
}
public void menuDisabled(){}
}
public class EditImage implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public EditImage(Picto picto){
p = picto;
}
public String getName() { return "editImage"; }
public String getLabel() { return null; }
public int getIcon() { return R.drawable.edit_picture; }
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return null; }
public void menuActiviated()
{
/**TODO: Llamar a la interfaz de editar foto*/
Toast.makeText(PCBcontext.getContext(),"Editar Imagen", Toast.LENGTH_SHORT).show();
}
public void menuDisabled(){}
}
}
......@@ -11,7 +11,6 @@ import android.content.ClipDescription;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff;
......@@ -20,10 +19,8 @@ import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.speech.tts.UtteranceProgressListener;
import android.support.v4.content.ContextCompat;
import android.text.InputType;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.DragEvent;
......@@ -38,7 +35,6 @@ import android.view.WindowManager;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.CheckBox;
import android.widget.EditText;
......@@ -51,13 +47,10 @@ import android.widget.Toast;
import com.yottacode.pictogram.action.PictosAction;
import com.yottacode.pictogram.action.TalkAction;
import com.yottacode.pictogram.action.VocabularyAction;
import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.dao.User;
import com.yottacode.pictogram.grammar.Vocabulary;
import com.yottacode.pictogram.grammar.iLocalPicto;
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;
......@@ -71,7 +64,6 @@ import com.yottacode.pictogram.tts.TTSHelper;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
......@@ -80,13 +72,11 @@ import java.util.Locale;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import static android.graphics.Color.BLACK;
import static android.graphics.Color.argb;
import static android.graphics.Color.rgb;
public class PictogramActivity extends Activity implements VocabularyTalk.iVocabularyListener {
float firstTouchX = -1;
// Main layout for this activity
RelativeLayout mainLayout;
// Adapter for de grid showing the categories grid (and main pictos)
......@@ -107,8 +97,6 @@ public class PictogramActivity extends Activity implements VocabularyTalk.iVocab
TTSHelper tts;
// Element used for loading new pictos (while changing categories)
Vocabulary vocabulary;
// TODO describe this variable
static final int SELECT_PICTURE = 1;
// For disabling volume button (See method at the end of the class)
private final List blockedKeys = new ArrayList(Arrays.asList(KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP));
// String constant for logs
......@@ -131,12 +119,9 @@ public class PictogramActivity extends Activity implements VocabularyTalk.iVocab
private boolean feedback_highlight;
private boolean deleting;
//Variables used on the picto menu (only supervisors)
private RadialMenuWidget PieMenu;
private ImageView detail;
private RelativeLayout ll;
private boolean tape_delivered=false;
private boolean tape_delivered=false;
float firstTouchX = -1;
@TargetApi(Build.VERSION_CODES.M)
@Override
......@@ -475,15 +460,13 @@ public class PictogramActivity extends Activity implements VocabularyTalk.iVocab
*/
private void hidePictoMainGridView() {
if (!tape_delivered) {
this.pictoCategoryGridAdapter.clear();
this.pictoCategoryGridAdapter.addAll(this.sort(this.vocabulary.next(this.currentCategory)));
this.pictoCategoryGridAdapter.notifyDataSetChanged();
if (this.currentCategory.get_color() != -1) {
if (this.currentCategory.get_color() != -1)
this.pictoCategoryGridView.setBackgroundColor(this.currentCategory.get_color());
}
}
this.pictoMainGridView.setEnabled(false);
this.pictoCategoryGridView.setEnabled(true);
......@@ -495,7 +478,7 @@ public class PictogramActivity extends Activity implements VocabularyTalk.iVocab
/**
* Returns pictoCategoryGridAdapter or pictoMainGridAdapter depending on the current View
*/
private PictoGridAdapter getCurrentPictoGridAdapter() {
protected PictoGridAdapter getCurrentPictoGridAdapter() {
return (currentCategory == null) ? this.pictoMainGridAdapter : this.pictoCategoryGridAdapter;
}
......@@ -773,7 +756,7 @@ public class PictogramActivity extends Activity implements VocabularyTalk.iVocab
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Picto p = getCurrentPictoGridAdapter().getItem(position);
Log.e("clicklistener",p+(p==null ? "NULL" : p.toString()+" "+p.get_row()));
if (p != null && p.get_id() != 0 && !p.is_invisible() && p.is_enabled()) {
p.set_mirror(false, false);
......@@ -787,10 +770,7 @@ Log.e("clicklistener",p+(p==null ? "NULL" : p.toString()+" "+p.get_row()));
addPictoWord(p);
}
}
if (tape_delivered) {
tapeAdapter.clear();
showOnlyTape(false);
}
}
}
......@@ -853,19 +833,13 @@ Log.e("clicklistener",p+(p==null ? "NULL" : p.toString()+" "+p.get_row()));
if (currentCategory != null || !PCBcontext.getPcbdb().getCurrentUser().has_categories()) {
Log.d(LOG_TAG, "No tengo pictograma. Abro carrete...");
addPicto(position % maxColumns, (int) (position / maxColumns));
new PictoMenu(PictogramActivity.this).addPicto(position % maxColumns, (int) (position / maxColumns));
} else
Toast.makeText(PictogramActivity.this, PictogramActivity.this.getResources().getString(R.string.notNewCats), Toast.LENGTH_SHORT).show();
} else {
//Si es supervisor hacer aparecer el menú de opciones del picto
View pictoSquare = getCurrentPictoGridAdapter().getView(position,view,parent);
if(pictoSquare.getWidth() == 100){ //Si esta en formato de pictos normal
createMenuForPicto(0,p);
}else{
createMenuForPicto(1,p);
}
//p.alter_status();
new PictoMenu(PictogramActivity.this).createMenuForPicto(PCBcontext.getPcbdb().getCurrentUser().is_picto_size_big(),p);
getCurrentPictoGridAdapter().notifyDataSetChanged();
}
} else {
......@@ -908,8 +882,6 @@ Log.e("clicklistener",p+(p==null ? "NULL" : p.toString()+" "+p.get_row()));
tapeAdapter.ttsAllNew(tts);
if (!PCBcontext.getPcbdb().getCurrentUser().delete_tape_after_delivery()) {
showOnlyTape(true);
animateTapeView(0,(ViewGroup)arg0.getParent());
}
}
}
......@@ -918,16 +890,40 @@ Log.e("clicklistener",p+(p==null ? "NULL" : p.toString()+" "+p.get_row()));
private void showOnlyTape(boolean onlyTape) {
this.tape_delivered=onlyTape;
if (onlyTape) {
hidePictoMainGridView();
this.pictoCategoryGridAdapter.clear();
this.pictoCategoryGridAdapter.addAll(this.sort(null));
this.pictoCategoryGridAdapter.notifyDataSetChanged();
this.pictoCategoryGridView.setBackgroundColor(Color.WHITE);
this.showPictoCategoriesViewButton.setVisibility(View.GONE);
ttsButton.setEnabled(false);
if (this.pictoMainGridView.getAnimation() != this.hidePictoMainViewAnimation) {
this.showPictoCategoriesViewButton.setVisibility(View.INVISIBLE);
this.pictoCategoryGridView.setVisibility(View.INVISIBLE);
this.pictoMainGridView.setAlpha(0.25f);
this.pictoMainGridView.setEnabled(false);
}
else {
this.pictoCategoryGridView.setAlpha(0.25f);
this.pictoCategoryGridView.setEnabled(false);
this.showPictoCategoriesViewButton.setAlpha(0f);
}
animateTapeViewVertical(false);
}
else {
ttsButton.setEnabled(true);
animateTapeViewVertical(true);
if (this.pictoMainGridView.getAnimation() != this.hidePictoMainViewAnimation) {
this.showPictoCategoriesViewButton.setVisibility(View.VISIBLE);
showPictoMainGridView();
this.pictoCategoryGridView.setVisibility(View.VISIBLE);
this.pictoMainGridView.setAlpha(1f);
this.pictoMainGridView.setEnabled(true);
this.showPictoCategoriesViewButton.setAlpha(1f);
}
else {
this.pictoCategoryGridView.setAlpha(1f);
this.pictoCategoryGridView.setEnabled(true);
this.showPictoCategoriesViewButton.setAlpha(1f);
}
}
}
......@@ -1027,139 +1023,11 @@ private void showOnlyTape(boolean onlyTape) {
}
}
/* *********************************************************************************************
* Methods for adding a new picto from pcb
* ********************************************************************************************/
/**
* add a local picto from pcb
*
* @param row
* @param col
*/
public void addPicto(int row, int col) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
if (PCBcontext.getPcbdb().getCurrentUser().has_categories()) {
this.getIntent().putExtra(Picto.JSON_ATTTRS.ROW, row);
this.getIntent().putExtra(Picto.JSON_ATTTRS.COLUMN, col);
} else {
this.getIntent().putExtra(Picto.JSON_ATTTRS.FREE_ROW, row);
this.getIntent().putExtra(Picto.JSON_ATTTRS.FREE_COLUMN, col);
}
startActivityForResult(intent, SELECT_PICTURE);
}
/**
* 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) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getResources().getString(R.string.enterImgLabel));
// Set up the input
final EditText input = new EditText(this);
input.setInputType(InputType.TYPE_CLASS_TEXT);
builder.setView(input);
// Set up the buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int cat = PictogramActivity.this.currentCategory != null
? PictogramActivity.this.currentCategory.get_id()
: Picto.NO_CATEGORY;
PCBcontext.getVocabulary().saveLocalPicto(
selectedImagePath,
input.getText().toString(),
cat,
row,
col,
freeRow,
freeColumn,
new iLocalPicto() {
@Override
public void saved(Picto localPicto) {
PictogramActivity.this.refresh();
try {
if (PCBcontext.is_user_online())
new PictoUploader(localPicto).upload(PictogramActivity.this);
} catch (IOException e) {
Log.e(Vocabulary.class.getCanonicalName(), e.getMessage());
}
}
});
}
});
builder.show();
}
/**
* Función para la selección de una foto del carrete
*
* @param requestCode
* @param resultCode
* @param data
*/
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
String selectedImagePath;
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
int row = this.getIntent().getIntExtra(Picto.JSON_ATTTRS.ROW, -1);
int col = this.getIntent().getIntExtra(Picto.JSON_ATTTRS.COLUMN, -1);
int freeRow = this.getIntent().getIntExtra(Picto.JSON_ATTTRS.FREE_ROW, -1);
int freeColumn = this.getIntent().getIntExtra(Picto.JSON_ATTTRS.FREE_COLUMN, -1);
Log.i(this.getClass().getCanonicalName(), "0 Picto x y " + " " + row + " " + col);
this.getIntent().removeExtra(Picto.JSON_ATTTRS.ROW);
this.getIntent().removeExtra(Picto.JSON_ATTTRS.COLUMN);
this.getIntent().removeExtra(Picto.JSON_ATTTRS.FREE_ROW);
this.getIntent().removeExtra(Picto.JSON_ATTTRS.FREE_COLUMN);
chooseTextAndSavePicto(selectedImagePath, row, col, freeRow, freeColumn);
}
}
}
/**
* Función para la selección de una foto del carrete
*
* @param uri
* @return
*/
static public String getPath(Uri uri) {
if (uri == null) {
return null;
}
// this will only work for images selected from gallery
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = PCBcontext.getContext().getContentResolver().query(uri, projection, null, null, null);
if (cursor != null) {
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
return uri.getPath();
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
int in=0,out=0;
Intent nextActivity=null;
Intent intent =getIntent();
Intent intent = getIntent();
boolean student_view=intent.getBooleanExtra("student_view",false);
if (PCBcontext.getPcbdb()!=null && (PCBcontext.getPcbdb().getCurrentUser().is_supervisor() || student_view) ) {
switch (event.getAction()) {
......@@ -1167,8 +1035,6 @@ private void showOnlyTape(boolean onlyTape) {
firstTouchX = event.getX();
break;
case MotionEvent.ACTION_UP:
if (this.tape_delivered)
showOnlyTape(false);
if (event.getX() > firstTouchX + 100) { //izquierda a derecha
if (!student_view) {
PCBcontext.getPcbdb().getCurrentUser().get_Img_sup().update_id(User.NO_SUPERVISOR);
......@@ -1191,6 +1057,7 @@ private void showOnlyTape(boolean onlyTape) {
out = R.anim.leftout;
}
if (nextActivity != null) {
tape_delivered=false;
intent.putExtra("student_view", !PCBcontext.getPcbdb().getCurrentUser().is_supervisor());
finish();
startActivity(nextActivity);
......@@ -1207,7 +1074,7 @@ private void showOnlyTape(boolean onlyTape) {
public void animateImageView(View view, final int position) {
if (PictogramActivity.this.deleting) return;
if (deleting) return;
View borderlayout=((RelativeLayout)view).getChildAt(0);
final ImageView v=((ImageView)((FrameLayout)borderlayout).getChildAt(0));
......@@ -1235,17 +1102,16 @@ private void showOnlyTape(boolean onlyTape) {
@Override
public void onAnimationStart(Animator animation) {
PictogramActivity.this.deleting=true;
deleting=true;
}
@Override
public void onAnimationEnd(Animator animation) {
Log.i(this.getClass().getCanonicalName(),"DELETING "+position);
tapeAdapter.deleteItem(position);
tapeAdapter.notifyDataSetChanged();
v.setColorFilter(0);
v.setBackgroundColor(ContextCompat.getColor(PCBcontext.getContext(),R.color.picto_default_background));
PictogramActivity.this.deleting=false;
deleting=false;
if (tapeAdapter.getCount()==0) {
showOnlyTape(false);
}
......@@ -1266,59 +1132,6 @@ private void showOnlyTape(boolean onlyTape) {
}
public void animateTapeView(final int position, final ViewGroup view) {
GridView gridview = (GridView)view.getChildAt(1);
RelativeLayout relativeLayout=(RelativeLayout)(gridview.getChildAt(position));
FrameLayout layout=(FrameLayout)(relativeLayout.getChildAt(0));
final ImageView v=(ImageView)(layout.getChildAt(0));
final int orange = ContextCompat.getColor(PCBcontext.getContext(), R.color.red);
final ValueAnimator colorAnim = ObjectAnimator.ofFloat(0f, 1f, 0f);
colorAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float mul = (Float) animation.getAnimatedValue();
int alphaOrange = adjustAlpha(orange, mul);
v.setColorFilter(alphaOrange, PorterDuff.Mode.SRC_ATOP);
v.setBackgroundColor(alphaOrange);
v.setPadding(0, 0, 0, 0);
if (mul == 0.0) {
v.setColorFilter(0);
}
}
});
colorAnim.addListener(new ValueAnimator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
v.setColorFilter(0);
v.setBackgroundColor(ContextCompat.getColor(PCBcontext.getContext(), R.color.picto_default_background));
if (position <(tapeAdapter.getCount()-1)) animateTapeView(position + 1, view);
else animateTapeView(false);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
colorAnim.setDuration(tapeAdapter.getItem(position).get_translation().length()*100);
colorAnim.start();
}
public static int adjustAlpha(int color, float factor) {
int alpha = Math.round(Color.alpha(color) * factor);
int red = Color.red(color);
......@@ -1328,309 +1141,24 @@ private void showOnlyTape(boolean onlyTape) {
}
/**Function for open a new View for change the expression of a picto
*
* @param picto
*/
public void createViewForExpression(final Picto picto){
ll = new RelativeLayout(PCBcontext.getContext());
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
addContentView(ll, params);
ll.setBackgroundColor(argb(180,0,0,0));
ll.setClickable(false);
//Parameters for hide navigation bar when u save or cancel
final View decorView = getWindow().getDecorView();
final int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
/*| View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE*/;
final EditText leyenda = new EditText(PCBcontext.getContext());
leyenda.setBackgroundColor(rgb(221, 221, 211));
leyenda.setWidth(400);
leyenda.setMaxLines(1);
leyenda.setClickable(true);
leyenda.setTextSize(25);
leyenda.setX(PictogramActivity.this.getResources().getDisplayMetrics().widthPixels/2 - 300);
leyenda.setY(PictogramActivity.this.getResources().getDisplayMetrics().heightPixels/2 - 50);
leyenda.setTextColor(BLACK);
if(picto.get_translation()!= null && picto != null){
leyenda.setText(picto.get_translation());
}else{
leyenda.setText("Sin Descripción");
}
//Mostrar teclado automaticamente
final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
ImageButton botonOk = new ImageButton(PCBcontext.getContext());
botonOk.setImageResource(android.R.drawable.ic_menu_save);
botonOk.setX(PictogramActivity.this.getResources().getDisplayMetrics().widthPixels/2 + 110);
botonOk.setY(PictogramActivity.this.getResources().getDisplayMetrics().heightPixels/2 - 50);
botonOk.setBackgroundColor(rgb(221,221,221));
botonOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
picto.set_translation(leyenda.getText().toString());
imm.hideSoftInputFromWindow(leyenda.getWindowToken(), 0);
picto.set_local_status(true);
if (!picto.is_local()) {
new PictoUploader(picto).uploadState();
PCBcontext.getActionLog().log(new VocabularyAction(VocabularyAction.ALTERATTRS, picto));
}
getCurrentPictoGridAdapter().notifyDataSetChanged();
ll.setVisibility(View.GONE);
ll.removeAllViewsInLayout();
//Hide navigation bar
//PictogramActivity.this.refresh();
decorView.setSystemUiVisibility(uiOptions);
}
});
ImageButton botonSalir = new ImageButton(PCBcontext.getContext());
botonSalir.setImageResource(android.R.drawable.ic_menu_close_clear_cancel);
botonSalir.setX(PictogramActivity.this.getResources().getDisplayMetrics().widthPixels/2 + 150);
botonSalir.setY(PictogramActivity.this.getResources().getDisplayMetrics().heightPixels/2 - 50);
botonSalir.setBackgroundColor(rgb(221,221,221));
botonSalir.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imm.hideSoftInputFromWindow(leyenda.getWindowToken(), 0);
ll.setVisibility(View.GONE);
ll.removeAllViewsInLayout();
//Hide navigation bar
//PictogramActivity.this.refresh();
decorView.setSystemUiVisibility(uiOptions);
}
});
ll.addView(leyenda);
ll.addView(botonOk);
ll.addView(botonSalir);
leyenda.requestFocus();
imm.showSoftInput(leyenda, InputMethodManager.SHOW_FORCED);
}
/**Function for build a radial menu
*
* @param tamPicto
* @param picto
*/
private void createMenuForPicto(int tamPicto, Picto picto){
ll = new RelativeLayout(PCBcontext.getContext());
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
addContentView(ll, params);
ll.setBackgroundColor(argb(180,0,0,0));
detail = new ImageView(PCBcontext.getContext());
int centerX = PictogramActivity.this.getResources().getDisplayMetrics().widthPixels/2;
int centerY = PictogramActivity.this.getResources().getDisplayMetrics().heightPixels/2;
if(tamPicto==0){
centerY += 100;
detail.setMaxWidth(90);
}else{
centerY += 135;
detail.setMaxWidth(115);
}
PieMenu = new RadialMenuWidget(PCBcontext.getContext());
PieMenu.setAnimationSpeed(0L);
PieMenu.setCenterLocation(centerX - (PieMenu.getcRadius()*2) - 50, centerY-(PieMenu.getcRadius()*2));
PieMenu.setIconSize(20,35); //Tamaño del icono
PieMenu.setCenterCircle(new Close(picto));
PieMenu.addMenuEntry(new UnlockPictoMenu(picto));
PieMenu.addMenuEntry(new DisablePictoMenu(picto));
PieMenu.addMenuEntry(new SetInvisibleMenu(picto));
//PieMenu.addMenuEntry(new EditMenu(picto));
ll.addView(PieMenu);
try {
detail.setImageBitmap(picto.get_bitmap(PCBcontext.getContext()));
detail.setBackgroundColor(picto.get_color());
detail.setX(centerX+10);
detail.setY(centerY - (picto.get_bitmap(PCBcontext.getContext()).getHeight()));
} catch (IOException e) {
e.printStackTrace();
}
ll.addView(detail);
}
/** Menu of picto classes */
//Close menu button
public class Close implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public Close(Picto picto){
this.p = picto;
}
public String getName() { return "Close"; }
public String getLabel() { return null; }
public int getIcon() { return android.R.drawable.ic_menu_close_clear_cancel; }
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return null; }
//Metodo para realizar acciones si se pulsa
public void menuActiviated()
{
ll.setVisibility(View.GONE);
((RelativeLayout)PieMenu.getParent()).removeView(PieMenu);
}
public void menuDisabled(){}
}
//Disable menu button
public class DisablePictoMenu implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public DisablePictoMenu(Picto picto){
this.p = picto;
}
public String getName() { return "disable"; }
public String getLabel() { return null; }
public int getIcon() { return R.drawable.disabled_picto; }
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return null; }
public void menuActiviated()
{
p.alter_status("disabled");
getCurrentPictoGridAdapter().notifyDataSetChanged();
ll.setVisibility(View.GONE);
((RelativeLayout)PieMenu.getParent()).removeView(PieMenu);
}
public void menuDisabled(){}
}
//Change image of picto menu button
public class SetInvisibleMenu implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public SetInvisibleMenu(Picto picto){
this.p = picto;
}
public String getName() { return "invisible"; }
public String getLabel() { return null; }
public int getIcon() { return R.drawable.eye_blocked; }
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return null; }
public void menuActiviated()
{
p.alter_status("invisible");
getCurrentPictoGridAdapter().notifyDataSetChanged();
ll.setVisibility(View.GONE);
((RelativeLayout)PieMenu.getParent()).removeView(PieMenu);
}
public void menuDisabled(){}
}
//Activate/enable picto on vocabulary menu button
public class UnlockPictoMenu implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public UnlockPictoMenu(Picto picto){
this.p = picto;
}
public String getName() { return "enable"; }
public String getLabel() { return null; }
public int getIcon() { return R.drawable.unlock; }
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return null; }
public void menuActiviated()
{
p.alter_status("enabled");
getCurrentPictoGridAdapter().notifyDataSetChanged();
ll.setVisibility(View.GONE);
((RelativeLayout)PieMenu.getParent()).removeView(PieMenu);
}
public void menuDisabled(){}
}
//Edit menu button
public class EditMenu implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public EditMenu(Picto picto){
this.p = picto;
}
public String getName() { return "edit"; }
public String getLabel() { return null; }
public int getIcon() { return R.drawable.edit; }
private List<RadialMenuWidget.RadialMenuEntry> children;
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return children; }
public void menuActiviated()
{
ll.getChildAt(1).setX(ll.getChildAt(1).getX() + 30);
children = new ArrayList<>(Arrays.asList(new EditTextPicto(p),new EditImage(p)));
}
public void menuDisabled(){
ll.getChildAt(1).setX(ll.getChildAt(1).getX() - 30);
}
}
//Edit legend text of picto button
public class EditTextPicto implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public EditTextPicto(Picto picto){
this.p = picto;
}
public String getName() { return "editText"; }
public String getLabel() { return null; }
public int getIcon() { return R.drawable.edit_text; }
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return null; }
public void menuActiviated()
{
ll.setVisibility(View.GONE);
ll.removeAllViewsInLayout();
createViewForExpression(this.p);
}
public void menuDisabled(){}
}
public class EditImage implements RadialMenuWidget.RadialMenuEntry
{
Picto p;
public EditImage(Picto picto){
this.p = picto;
}
public String getName() { return "editImage"; }
public String getLabel() { return null; }
public int getIcon() { return R.drawable.edit_picture; }
public List<RadialMenuWidget.RadialMenuEntry> getChildren() { return null; }
public void menuActiviated()
{
/**TODO: Llamar a la interfaz de editar foto*/
Toast.makeText(PCBcontext.getContext(),"Editar Imagen", Toast.LENGTH_SHORT).show();
}
public void menuDisabled(){}
}
public void animateTapeView(final boolean up) {
final View v = (View)this.tapeGridView.getParent();
Log.e("WEE","W:"+findViewById(R.id.pictogramLayout).getWidth()/2);
final ValueAnimator colorAnim = ObjectAnimator.ofInt(0, 300);
colorAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void animateTapeViewVertical(final boolean up) {
final View v = findViewById(R.id.pictogramLayout);
int y=v.getHeight()/2-this.tapeGridView.getHeight()/2;
final ValueAnimator moveAnim = up
? ObjectAnimator.ofInt(y,0)
: ObjectAnimator.ofInt(0, y);
moveAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
v.setTop(v.getTop()+(up ? 1 : -1));
int i=(int)animation.getAnimatedValue();
v.setTranslationY(i);
if (i<=255) ttsButton.setImageAlpha(255-i);
}
});
colorAnim.setDuration(500);
colorAnim.start();
moveAnim.setDuration(500);
moveAnim.start();
}
}
......@@ -21,8 +21,6 @@ import com.yottacode.pictogram.dao.User;
import com.yottacode.pictogram.dao.UserLogin;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.gui.communicator.PictogramActivity;
import com.yottacode.pictogram.tabletlibrary.gui.login.CustomListLogin;
import com.yottacode.pictogram.tabletlibrary.gui.login.LoginActivity;
import com.yottacode.pictogram.tabletlibrary.net.NetServiceTablet;
import com.yottacode.pictogram.tools.PCBcontext;
......
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