working on PCB sessions (3)

parent bf9a9ff0
......@@ -62,7 +62,7 @@ public class RestapiWrapper {
ask(operation, params, postOrGet, false, listener);
}
public void ask(String operation, Hashtable<String, String> params, String postOrGet, boolean json, iRestapiListener listener) {
Log.i(this.getClass().getCanonicalName(),"Asking for "+operation);
// call preExecute listener to show loading window
listener.preExecute();
// call AsynTask to perform network operation on separate thread
......@@ -130,16 +130,17 @@ public class RestapiWrapper {
private static JSONObject resultToJSON(HttpURLConnection urlConnection) throws IOException {
int responseCode=urlConnection.getResponseCode();
String response="";
StringBuilder response=new StringBuilder("");
String line;
JSONObject JSONresponse;
BufferedReader br = new BufferedReader(new InputStreamReader(responseCode == HttpsURLConnection.HTTP_OK
? urlConnection.getInputStream()
: urlConnection.getErrorStream()));
// Log.i(com.yottacode.net.RestapiWrapper.class.getName(), "starting to read server answer for"+urlConnection.getURL().toString());
while ((line=br.readLine()) != null) {
response+=line;
response.append(line);
}
if (response.length()==0) response="{\"result\":null}";
if (response.length()==0) response.append("{\"result\":null}");
try {
JSONresponse = new JSONObject("{ "+SERVER_RESULT+": " + response + (responseCode == HttpsURLConnection.HTTP_OK
......@@ -149,7 +150,7 @@ public class RestapiWrapper {
JSONresponse = null;
Log.e(RestapiWrapper.class.getCanonicalName(),e.getMessage());
}
Log.i(com.yottacode.net.RestapiWrapper.class.getName(), "server answer: " + JSONresponse.toString());
// Log.i(com.yottacode.net.RestapiWrapper.class.getName(), "server answer: " + JSONresponse.toString());
return JSONresponse;
}
......@@ -236,7 +237,7 @@ public class RestapiWrapper {
@Override
protected HttpAsyncTaskParams doInBackground(HttpAsyncTaskParams... params) {
try {
Log.i(com.yottacode.net.RestapiWrapper.class.getName(), " asking to the server for " + params[0].url+" params:"+params[0].url_params +" JSON?"+params[0].json_params);
Log.i(com.yottacode.net.RestapiWrapper.class.getName(), " Asking to the server for " + params[0].url+" params:"+params[0].url_params +" JSON?"+params[0].json_params);
JSONObject jresult = params[0].request_method.equalsIgnoreCase("GET")
? GET(params[0].url, params[0].url_params)
: POST(params[0].url, params[0].request_method, params[0].url_params, params[0].json_params);
......
......@@ -9,6 +9,7 @@ import com.yottacode.pictogram.tools.PCBcontext;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Iterator;
import java.util.Vector;
/**
......@@ -69,9 +70,11 @@ public class ActionTalk implements Emitter.Listener {
public void addListener(iActionListener listener) {
listeners.add(listener);
}
public void removeListener(iActionListener removedlistener) {
for (iActionListener listener:this.listeners )
if (listener==removedlistener) listeners.remove(removedlistener);
Iterator listeners=this.listeners.iterator();
while (listeners.hasNext() )
if (listeners.next()==removedlistener) listeners.remove();
}
/**
......
......@@ -124,7 +124,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/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/dependency-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/24.2.1/jars" />
......
......@@ -18,7 +18,6 @@ import com.yottacode.net.iRestapiListener;
import com.yottacode.pictogram.dao.User;
import com.yottacode.pictogram.net.ImgDownloader;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tabletlibrary.gui.session.SessionActivity;
import com.yottacode.pictogram.tools.Img;
import com.yottacode.pictogram.tools.PCBcontext;
import com.yottacode.tools.GUITools;
......@@ -117,10 +116,8 @@ public class StudentFragmentGrid extends Fragment{
@Override
public void loadComplete() {
if (progressDialog!=null && progressDialog.isShowing()) progressDialog.dismiss();
Intent sessionActivity = new Intent(getActivity(), SessionActivity.class);
startActivity(sessionActivity);
//Intent pictogramActivity = new Intent(getActivity(), PictogramActivity.class);
//startActivity(pictogramActivity);
Intent pictogramActivity = new Intent(getActivity(), PictogramActivity.class);
startActivity(pictogramActivity);
}
@Override
......
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.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.TextView;
import com.yottacode.pictogram.dao.Picto;
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 class Item {
Picto picto;
int secs;
public void setCurrentMsg(int currentMsg) {
this.currentMsg = currentMsg;
}
public static class Item {
Bitmap img;
String secs;
public Item(Bitmap img, String secs) {
this.img=img;
this.secs=secs;
}
Bitmap getImg() {
return img;
}
String getTime() {
return secs;
}
public void setImg(Bitmap currmsg) {
this.img=currmsg;
}
}
Context context;
Vector<Item> msg;
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);
newMsg();
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 Object getItem(int position) {
public Item getItem(int position) {
return msg.get(position);
}
......@@ -49,11 +93,106 @@ public long getItemId(int position) {
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View vi = convertView;
if (vi == null)
vi = inflater.inflate(R.layout.session_picto_view, null);
return vi;
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);
else
vi.setBackgroundColor(Color.TRANSPARENT);
return vi;
}
public void addItem(Bitmap bmp) {
Item item=this.msg.get(currentMsg);
Bitmap oldmsg=item.getImg();
// bmp=new BitmapTools(bmp).resize(85,85).get();
bmp=set_text(context,bmp,getTimeDiff(new Date().getTime()));
Bitmap currmsg=combineImages(oldmsg,bmp);
item.setImg(currmsg);
}
public void newMsg() {
Bitmap bmp=BitmapFactory.decodeResource(context.getResources(),
R.drawable.session_starttry);
bmp=new BitmapTools(bmp).resize(75,75).get();
Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
calendar.setTime(new Date()); // assigns calendar to given date
String time= calendar.get(Calendar.HOUR)+":"+calendar.get(Calendar.MINUTE)+":"+calendar.get(Calendar.SECOND);
bmp=set_text(context,bmp,time);
if (this.currentMsg==this.msg.size()-1 || this.msg.size()==0) {
this.currentMsg = this.msg.size();
msg.add(new Item(bmp, time));
}
else {
this.currentMsg = this.msg.size() - 1;
notifyDataSetChanged();
}
}
private Bitmap combineImages(Bitmap c, Bitmap s) { // can add a 3rd parameter 'String loc' if you want to save the new image - left some code to do that at the bottom
Bitmap cs = null;
int width, height = 0;
if(c.getWidth() > s.getWidth()) {
width = c.getWidth() + s.getWidth();
height = c.getHeight();
} else {
width = s.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;
}
static Bitmap set_text(Context context,Bitmap bitmap,String texto) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
int width = bitmap.getWidth(); //Ancho original
int height = bitmap.getHeight(); //Alto original
android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig();
if (bitmapConfig == null) {
bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
}
bitmap = bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(bitmap);
Bitmap bm = Bitmap.createScaledBitmap(bitmap, (int)Math.round(0.9*width), (int)Math.round(0.9*height), false);
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); //Poner en blanco el bitmap original para dibujar encima
canvas.drawBitmap(bm, 0, 0, paint);
TextView textView = new TextView(context);
textView.layout(0, 50, 100, 100);
textView.setPadding(0, 0, 0, 0);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 13);
textView.setTextColor(Color.BLACK);
textView.setBackgroundColor(Color.TRANSPARENT);
textView.setWidth(100);
textView.setGravity(Gravity.CENTER_HORIZONTAL);
textView.setMaxLines(1);
textView.setText(texto);
textView.setDrawingCacheEnabled(true);
canvas.drawBitmap(textView.getDrawingCache(), 0, 60, null);
return bitmap;
}
}
......@@ -2,6 +2,7 @@ package com.yottacode.pictogram.tabletlibrary.gui.session;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
......@@ -9,16 +10,19 @@ 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.net.websockets.ActionTalk;
import com.yottacode.pictogram.tabletlibrary.R;
import com.yottacode.pictogram.tools.PCBcontext;
import java.io.IOException;
/**
* A simple {@link Fragment} subclass.
* Activities that contain this fragment must implement the
* {@link SessionFragment.OnFragmentInteractionListener} interface
* {@link SessionFragment.OnSessionListener } interface
* to handle interaction events.
* Use the {@link SessionFragment#newInstance} factory method to
* create an instance of this fragment.
......@@ -33,9 +37,10 @@ public class SessionFragment extends Fragment implements ActionTalk.iActionListe
private String mParam1;
private String mParam2;
ListView list_pictomsgs;
ListView list_pictomsg;
PictoAdapter adapter_pictomsg;
private OnFragmentInteractionListener mListener;
private OnSessionListener mListener=null;
public SessionFragment() {
// Required empty public constructor
......@@ -73,24 +78,28 @@ public class SessionFragment extends Fragment implements ActionTalk.iActionListe
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_session, container, false);
list_pictomsgs = (ListView) this.getActivity().findViewById(R.id.session_pictomsg_list);
// list_pictomsgs.setAdapter(new PictoAdapter(this.getContext()));
list_pictomsg = (ListView) view.findViewById(R.id.session_pictomsg_list);
adapter_pictomsg=new PictoAdapter(this.getContext());
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);
((PictoAdapter)list_pictomsg.getAdapter()).notifyDataSetChanged();
}
});
return view;
}
// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@SuppressWarnings("deprecation")
@Override
public void onAttach(Activity context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
if ( mListener==null)
if (context instanceof OnSessionListener) {
mListener = (OnSessionListener ) context;
PCBcontext.getVocabulary().addActionTalkListener(this);
} else {
throw new RuntimeException(context.toString()
......@@ -101,8 +110,9 @@ public class SessionFragment extends Fragment implements ActionTalk.iActionListe
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
if ( mListener==null)
if (context instanceof OnSessionListener ) {
mListener = (OnSessionListener ) context;
PCBcontext.getVocabulary().addActionTalkListener(this);
} else {
throw new RuntimeException(context.toString()
......@@ -120,6 +130,27 @@ public class SessionFragment extends Fragment implements ActionTalk.iActionListe
@Override
public void action(action action, int picto_cat, int picto_id) {
Log.e(this.getClass().getCanonicalName(),"ACTION VOC");
try {
Bitmap bmp=PCBcontext.getVocabulary().get_picto(picto_cat,picto_id).get_bitmap(getContext());
this.adapter_pictomsg.addItem(bmp);
getActivity().runOnUiThread(new Runnable() {
public void run() {
adapter_pictomsg.notifyDataSetChanged();
}});
} catch (IOException e) {
e.printStackTrace();
}
}
public void newMsg(Bitmap bmp) {
Log.e(this.getClass().getCanonicalName(),"ACTION VOC");
this.adapter_pictomsg.addItem(bmp);
this.adapter_pictomsg.newMsg();
getActivity().runOnUiThread(new Runnable() {
public void run() {
adapter_pictomsg.notifyDataSetChanged();
}});
}
/**
......@@ -132,8 +163,8 @@ public class SessionFragment extends Fragment implements ActionTalk.iActionListe
* "http://developer.android.com/training/basics/fragments/communicating.html"
* >Communicating with Other Fragments</a> for more information.
*/
public interface OnFragmentInteractionListener {
public interface OnSessionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
void onSessionInteraction(Uri uri);
}
}
......@@ -6,6 +6,8 @@
android:background="#BDBDBD"
android:keepScreenOn="true"
android:id="@+id/pictogramLayout"
android:activityOpenEnterAnimation="@anim/slide_in"
android:activityOpenExitAnimation="@anim/slide_out"
tools:context="com.yottacode.pictogram.tabletlibrary.gui.PictogramActivity"
android:padding="@dimen/small_padding">
<!-- android:keepScreenOn - To keep the screen bright as long as the app is visible (also forever) -->
......
......@@ -118,7 +118,7 @@
android:id="@+id/sessionFragmentLayout"
android:layout_below="@+id/view"
android:layout_alignParentEnd="true"
android:layout_height="328dp">
android:layout_height="300dp">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
......
......@@ -3,20 +3,14 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.yottacode.pictogram.tabletlibrary.gui.session.SessionFragment"
android:orientation="vertical">
android:orientation="vertical" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<ListView
android:id="@+id/session_pictomsg_list"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="220dp"
android:orientation="horizontal" >
<ListView
android:id="@+id/session_pictomsg_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
android:layout_height="wrap_content"
android:layout_gravity="left|start">
</ListView>
</LinearLayout>
......@@ -2,23 +2,15 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="90dp"
android:layout_height="match_parent"
android:id="@+id/session_picto_layout"
android:background="@color/picto_default_background"
android:padding="@dimen/picto_padding">
<ImageView
android:id="@+id/session_picto"
android:layout_height="@dimen/picto_normal_height"
android:layout_width="match_parent"
android:contentDescription="" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/session_picto_time"/>
android:layout_width="wrap_content"
android:contentDescription="" />
</LinearLayout>
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