/*
* Author: Miguel Angel Bravo (@MiguelAngelBrav)
* The Android Open Source Project Katbag is licensed under the General GPLv3.
*
*/
package cl.ipp.katbag.fragment;
import java.util.ArrayList;
import com.google.analytics.tracking.android.EasyTracker;
import com.google.analytics.tracking.android.Fields;
import com.google.analytics.tracking.android.MapBuilder;
import com.google.analytics.tracking.android.Tracker;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.Button;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;
import cl.ipp.katbag.MainActivity;
import cl.ipp.katbag.R;
import cl.ipp.katbag.core.KatbagDrawing;
import cl.ipp.katbag.core.KatbagDrawingBuilder;
import cl.ipp.katbag.core.KatbagUtilities;
public class Player extends Fragment implements SensorEventListener {
private Tracker tracker;
static View v = null;
public static MainActivity mainActivity;
public long id_app = -1;
public String name_app_text = "";
public boolean editMode = false;
public RelativeLayout playerView;
public String mCurrentPhotoPath = "";
public boolean mMeasured = false;
public int[] loc;
public Button start;
public LinearLayout scorePanel;
public int intScore = 0;
public TextView score;
public SensorManager sensorManager;
public Sensor accelerometer;
public boolean useAccelerometer = false;
public long lastUpdate;
public float x = 0, y = 0, z = 0;
public float last_x = 0, last_y = 0, last_z = 0;
private static final int SHAKE_THRESHOLD = 800;
private ArrayList<String> develop = new ArrayList<String>();
public ArrayList<String> world = new ArrayList<String>();
public ArrayList<Integer> drawingUsesAccelerometer = new ArrayList<Integer>();
public ArrayList<Integer> drawingUsesRandomly = new ArrayList<Integer>();
public ArrayList<Integer> drawingUsesBounceThread = new ArrayList<Integer>();
public ArrayList<Integer> conditionId = new ArrayList<Integer>();
public ArrayList<Integer> conditionState = new ArrayList<Integer>();
public ArrayList<Integer> conditionLevel = new ArrayList<Integer>();
public ArrayList<Integer> iterationsId = new ArrayList<Integer>();
public ArrayList<Integer> iterationsN = new ArrayList<Integer>();
public ArrayList<Integer> iterationsBgn = new ArrayList<Integer>();
public ArrayList<Integer> iterationsLst = new ArrayList<Integer>();
public static ArrayList<Integer> touchEventId = new ArrayList<Integer>();
public static ArrayList<Integer> touchEventDrawing = new ArrayList<Integer>();
public static ArrayList<Integer> touchEventBgn = new ArrayList<Integer>();
public static ArrayList<Integer> touchEventLst = new ArrayList<Integer>();
public static ArrayList<Integer> scoreEqualId = new ArrayList<Integer>();
public static ArrayList<Integer> scoreEqualToN = new ArrayList<Integer>();
public static ArrayList<Integer> scoreEqualToBgn = new ArrayList<Integer>();
public static ArrayList<Integer> scoreEqualToLst = new ArrayList<Integer>();
public static ArrayList<Integer> shakeId = new ArrayList<Integer>();
public static ArrayList<Integer> shakeBgn = new ArrayList<Integer>();
public static ArrayList<Integer> shakeLst = new ArrayList<Integer>();
private MediaPlayer mPlayer;
private boolean muteAll = false;
private Handler mHandler = null;
private Handler mHandlerPlayer = null;
private Runnable mRunnable;
private Runnable mRunnablePlayer;
public static final int WORLD_ARRAY_TYPE = 0;
public static final int WORLD_ARRAY_SRC = 1;
public static final int WORLD_ARRAY_SCALE_FACTOR = 2;
public static final String WORLD_TYPE_COLOR = "color";
public static final String WORLD_TYPE_CAMERA = "camera";
public static final String WORLD_TYPE_LIBRARY = "library";
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.tracker = EasyTracker.getInstance(this.getActivity());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_player, container, false);
mainActivity = (MainActivity) super.getActivity();
// rescues parameters
Bundle bundle = getArguments();
if (bundle != null) {
id_app = bundle.getLong("id_app");
editMode = bundle.getBoolean("editMode");
name_app_text = bundle.getString("name_app");
}
scorePanel = (LinearLayout) v.findViewById(R.id.player_score_panel);
score = (TextView) v.findViewById(R.id.player_score);
start = (Button) v.findViewById(R.id.player_button_start);
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
scorePanel.setVisibility(View.VISIBLE);
start.setVisibility(View.GONE);
drawingUsesAccelerometer.clear();
drawingUsesBounceThread.clear();
conditionId.clear();
conditionState.clear();
conditionLevel.clear();
iterationsId.clear();
iterationsN.clear();
iterationsBgn.clear();
iterationsLst.clear();
touchEventId.clear();
touchEventDrawing.clear();
touchEventBgn.clear();
touchEventLst.clear();
scoreEqualId.clear();
scoreEqualToN.clear();
scoreEqualToBgn.clear();
scoreEqualToLst.clear();
shakeId.clear();
shakeBgn.clear();
shakeLst.clear();
develop = mainActivity.katbagHandler.selectDevelopForIdApp(id_app);
for (int i = 0; i < develop.size(); i++) {
String[] line = develop.get(i).split("&&");
if (line[1].contentEquals("sensing")) {
switch (Integer.parseInt(line[3])) {
case 0:
conditionId.add(Integer.valueOf(line[0]));
conditionState.add(0);
conditionLevel.add(Integer.valueOf(line[8]));
break;
case 1: // shake
conditionId.add(Integer.valueOf(line[0]));
conditionState.add(0);
conditionLevel.add(Integer.valueOf(line[8]));
break;
}
}
}
setScore(intScore);
play(0, develop.size());
}
});
playerView = (RelativeLayout) v.findViewById(R.id.player_view);
playerView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (!mMeasured) {
loc = new int[2];
playerView.getLocationInWindow(loc);
mMeasured = true;
start.setVisibility(View.VISIBLE);
}
}
});
return v;
}
public void setScore(int s) {
score.setText(String.valueOf(s));
for (int i = 0; i < scoreEqualToN.size(); i++) {
if (scoreEqualToN.get(i) == s) {
Log.d("ply", "setScore - ini:" + scoreEqualToBgn.get(i) + ", last:" + scoreEqualToLst.get(i));
play(scoreEqualToBgn.get(i), scoreEqualToLst.get(i) + 1);
}
}
}
public void play(final int first, final int last) {
int f = 0;
int i = first;
while (i < last) {
String[] line = develop.get(i).split("&&");
Log.d("ply", "exe:" + i + ", size:" + iterationsN.size());
if (runByLineType(line, i)) {
break;
}
if (iterationsN.size() > 0) {
f = iterationsN.size() - 1;
if (i == iterationsLst.get(f)) {
iterationsN.set(f, iterationsN.get(f) - 1);
i = iterationsBgn.get(f);
if (iterationsN.get(f) == 1) {
iterationsId.remove(f);
iterationsN.remove(f);
iterationsBgn.remove(f);
iterationsLst.remove(f);
}
} else
i++;
} else
i++;
Log.d("ply", "--------------------------------------");
}
}
public boolean runByLineType(String[] line, int lineNumber) {
boolean mBreak = false;
if (line[1].contentEquals("world")) {
setWorld(Long.parseLong(line[3]));
mBreak = false;
} else if (line[1].contentEquals("drawing")) {
setDrawing(line);
mBreak = false;
} else if (line[1].contentEquals("motion")) {
setMotion(line);
mBreak = false;
} else if (line[1].contentEquals("look")) {
setLook(line);
mBreak = false;
} else if (line[1].contentEquals("sound")) {
setSound(line);
mBreak = false;
} else if (line[1].contentEquals("control")) {
setControl(line, lineNumber);
switch (Integer.parseInt(line[3])) {
case 0:
mBreak = true;
break;
case 6:
mBreak = true;
break;
default:
mBreak = false;
break;
}
} else if (line[1].contentEquals("sensing")) {
setSensing(line, lineNumber);
mBreak = true;
}
return mBreak;
}
public void setSensing(String[] line, int lineNumber) {
switch (Integer.parseInt(line[3])) {
case 0:
boolean ex = false;
for (int z = 0; z < touchEventId.size(); z++) {
if (line[0].contentEquals(String.valueOf(touchEventId.get(z)))) {
ex = true;
break;
}
}
if (!ex) {
int last = -1;
for (int i = lineNumber + 1; i < develop.size(); i++) {
String[] it = develop.get(i).split("&&");
last = i;
if (Integer.parseInt(line[8]) >= Integer.parseInt(it[8])) {
last--;
break;
}
}
if ((lineNumber + 1) <= last) {
touchEventId.add(Integer.valueOf(line[0]));
touchEventDrawing.add(Integer.valueOf(line[4])); // drawing
touchEventBgn.add(lineNumber + 1); // begin in
touchEventLst.add(last); // ends
final KatbagDrawing drawing = (KatbagDrawing) v.findViewById(Integer.valueOf(line[4]));
if (drawing != null) {
drawing.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
for (int i = 0; i < touchEventDrawing.size(); i++) {
if (touchEventDrawing.get(i) == drawing.getId()) {
setBranchTreeCondition(touchEventId.get(i), 1);
if (checkTreeCondition(touchEventId.get(i))) {
Log.d("ply", "touchEventDrawing - ini:" + touchEventBgn.get(i) + ", last:" + touchEventLst.get(i));
play(touchEventBgn.get(i), touchEventLst.get(i) + 1);
break;
}
}
}
break;
case MotionEvent.ACTION_UP:
for (int i = 0; i < touchEventDrawing.size(); i++) {
if (touchEventDrawing.get(i) == drawing.getId()) {
setBranchTreeCondition(touchEventId.get(i), 0);
break;
}
}
break;
}
return true;
}
});
Log.d("ply", "setSensing - touchEvent add! count:" + touchEventId.size() + ", drawing:" + touchEventDrawing.get(touchEventDrawing.size() - 1) + " ini:" + touchEventBgn.get(touchEventBgn.size() - 1) + " last:" + touchEventLst.get(touchEventLst.size() - 1));
}
}
if (last > -1)
if ((last + 1) < develop.size())
play((last + 1), develop.size());
}
break;
case 1:
boolean ex1 = false;
for (int z = 0; z < shakeId.size(); z++) {
if (line[0].contentEquals(String.valueOf(shakeId.get(z)))) {
ex1 = true;
break;
}
}
if (!ex1) {
int last1 = -1;
for (int i = lineNumber + 1; i < develop.size(); i++) {
String[] it = develop.get(i).split("&&");
last1 = i;
if (Integer.parseInt(line[8]) >= Integer.parseInt(it[8])) {
last1--;
break;
}
}
if ((lineNumber + 1) <= last1) {
shakeId.add(Integer.valueOf(line[0]));
shakeBgn.add(lineNumber + 1); // begin in
shakeLst.add(last1); // ends
sensorManager = (SensorManager) mainActivity.context.getSystemService(Context.SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_FASTEST);
useAccelerometer = true;
Log.d("ply", "setSensing - shake add! count:" + shakeId.size() + ", ini:" + shakeBgn.get(shakeBgn.size() - 1) + " last:" + shakeLst.get(shakeLst.size() - 1));
}
if (last1 > -1)
if ((last1 + 1) < develop.size())
play((last1 + 1), develop.size());
}
break;
}
}
public boolean checkTreeCondition(int id) {
int pos = -1;
for (int i = 0; i < conditionId.size(); i++) {
if (conditionId.get(i) == id) {
pos = i;
break;
}
}
boolean sw = true;
for (int i = pos; i >= 0; i--) {
if ((conditionLevel.get(i) > 0) && (conditionState.get(i) == 1))
sw = true;
else if ((conditionLevel.get(i) == 0) && (conditionState.get(i) == 1)) {
sw = true;
break;
} else {
sw = false;
break;
}
}
Log.d("ply", "checkTC! id:" + id + ", sw:" + sw);
return sw;
}
public void setBranchTreeCondition(int id, int sw) {
for (int i = 0; i < conditionId.size(); i++) {
if (conditionId.get(i) == id) {
Log.d("ply", "setTC! id:" + conditionId.get(i) + ", state:" + sw);
conditionState.set(i, sw);
break;
}
}
}
public void setControl(String[] line, final int lineNumber) {
switch (Integer.parseInt(line[3])) {
case 0:
mHandler = new Handler();
mRunnable = new Runnable() {
@Override
public void run() {
Log.d("ply", "executeRunnable - Coninuar ejecuci�n desde linea:" + (lineNumber + 1) + " hasta:" + develop.size());
play(lineNumber + 1, develop.size());
}
};
mHandler.postDelayed(mRunnable, (long) (Float.parseFloat(line[4]) * 1000));
break;
case 1:
boolean ex = false;
for (int z = 0; z < iterationsId.size(); z++) {
if (line[0].contentEquals(String.valueOf(iterationsId.get(z)))) {
ex = true;
break;
}
}
if (!ex) {
int last = -1;
for (int i = lineNumber + 1; i < develop.size(); i++) {
String[] it = develop.get(i).split("&&");
last = i;
if (Integer.parseInt(line[8]) >= Integer.parseInt(it[8])) {
last--;
break;
}
}
if (((lineNumber + 1) <= last) && (Integer.valueOf(line[4]) > 1)) {
iterationsId.add(Integer.valueOf(line[0]));
iterationsN.add(Integer.valueOf(line[4])); // number of
// iterations
iterationsBgn.add(lineNumber + 1); // iterations begin in
iterationsLst.add(last); // iterations ends
Log.d("ply", "setControl - iterator add! count:" + iterationsId.size() + ", n:" + iterationsN.get(iterationsN.size() - 1) + " ini:" + iterationsBgn.get(iterationsBgn.size() - 1) + " last:" + iterationsLst.get(iterationsLst.size() - 1));
}
}
break;
case 2:
intScore = Integer.valueOf(line[4]);
setScore(intScore);
break;
case 3:
intScore = intScore + Integer.valueOf(line[4]);
setScore(intScore);
break;
case 4:
intScore = intScore - Integer.valueOf(line[4]);
setScore(intScore);
break;
case 5:
KatbagUtilities.message(mainActivity.context, line[4]);
break;
case 6:
boolean ex1 = false;
for (int z = 0; z < scoreEqualId.size(); z++) {
if (line[0].contentEquals(String.valueOf(scoreEqualId.get(z)))) {
ex1 = true;
break;
}
}
if (!ex1) {
int last1 = -1;
for (int i = lineNumber + 1; i < develop.size(); i++) {
String[] it = develop.get(i).split("&&");
last1 = i;
if (Integer.parseInt(line[8]) >= Integer.parseInt(it[8])) {
last1--;
break;
}
}
if ((lineNumber + 1) <= last1) {
scoreEqualId.add(Integer.valueOf(line[0]));
scoreEqualToN.add(Integer.valueOf(line[4])); // n
scoreEqualToBgn.add(lineNumber + 1); // begin in
scoreEqualToLst.add(last1); // ends
Log.d("ply", "setControl - scoreEqual add! count:" + scoreEqualId.size() + ", n:" + scoreEqualToN.get(scoreEqualToN.size() - 1) + " ini:" + scoreEqualToBgn.get(scoreEqualToBgn.size() - 1) + " last:" + scoreEqualToLst.get(scoreEqualToLst.size() - 1));
}
if (last1 > -1)
if ((last1 + 1) < develop.size())
play((last1 + 1), develop.size());
}
break;
}
}
public void setDrawing(String[] line) {
KatbagDrawingBuilder drawingBuilder = new KatbagDrawingBuilder(mainActivity.context);
drawingBuilder.setIdDrawing(Long.parseLong(line[3])); // this build the
// drawing
Bitmap bitmap = createBitmapFromRelativeLayout(drawingBuilder);
KatbagDrawing drawing = new KatbagDrawing(mainActivity.context);
drawing.setImageBitmap(bitmap);
drawing.setId(Integer.parseInt(line[3]));
drawing.setSizeFather(playerView.getWidth(), playerView.getHeight(), loc, playerView);
drawing.setMySize(drawingBuilder.getMyWidth(), drawingBuilder.getMyHeight());
if (editMode)
drawing.setBackgroundResource(R.drawable.border_one_drawing_part);
drawing.setScaleType(ScaleType.MATRIX);
playerView.addView(drawing);
}
public void setMotion(String[] line) {
KatbagDrawing drawingMove;
switch (Integer.parseInt(line[3])) {
case 0:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
if (drawingMove != null)
drawingMove.moveSteps(Integer.parseInt(line[5]));
break;
case 1:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
if (drawingMove != null)
drawingMove.moveToXY(Integer.parseInt(line[5]), Integer.parseInt(line[6]));
break;
case 2:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
if (drawingMove != null)
drawingMove.moveOnlyAxisX();
break;
case 3:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
if (drawingMove != null)
drawingMove.moveOnlyAxisY();
break;
case 4:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
if (drawingMove != null)
drawingMove.moveToCenter();
break;
case 5:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
drawingUsesAccelerometer.add(Integer.parseInt(line[4]));
if (drawingMove != null)
drawingMove.moveWithAccelerometer();
break;
case 6:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[5]));
if (drawingMove != null)
drawingMove.changeXforN(Integer.parseInt(line[4]));
break;
case 7:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[5]));
if (drawingMove != null)
drawingMove.changeYforN(Integer.parseInt(line[4]));
break;
case 8:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
drawingUsesBounceThread.add(Integer.parseInt(line[4]));
if (drawingMove != null)
drawingMove.moveAutomatic();
break;
case 9:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
drawingUsesRandomly.add(Integer.parseInt(line[4]));
if (drawingMove != null)
drawingMove.moveRandomly();
break;
case 10:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
drawingUsesRandomly.add(Integer.parseInt(line[4]));
if (drawingMove != null)
drawingMove.cancelMotionWithAccelerometer();
break;
case 11:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
drawingUsesRandomly.add(Integer.parseInt(line[4]));
if (drawingMove != null)
drawingMove.cancelMotionAutomatic();
break;
case 12:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
drawingUsesRandomly.add(Integer.parseInt(line[4]));
if (drawingMove != null)
drawingMove.cancelMotionRandomly();
break;
}
}
public void setLook(String[] line) {
KatbagDrawing drawingMove;
switch (Integer.parseInt(line[3])) {
case 0:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
if (drawingMove != null)
drawingMove.hide();
break;
case 1:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
if (drawingMove != null)
drawingMove.show();
break;
case 2:
drawingMove = (KatbagDrawing) playerView.findViewById(Integer.parseInt(line[4]));
KatbagDrawingBuilder drawingBuilder = new KatbagDrawingBuilder(mainActivity.context);
drawingBuilder.setIdDrawing(Long.parseLong(line[5])); // this build
// the
// drawing
Bitmap bitmap = createBitmapFromRelativeLayout(drawingBuilder);
drawingMove.setImageBitmap(bitmap);
drawingMove.setSizeFather(playerView.getWidth(), playerView.getHeight(), loc, playerView);
drawingMove.setMySize(drawingBuilder.getMyWidth(), drawingBuilder.getMyHeight());
if (editMode)
drawingMove.setBackgroundResource(R.drawable.border_one_drawing_part);
drawingMove.setScaleType(ScaleType.MATRIX);
break;
}
}
public void setSound(String[] line) {
switch (Integer.parseInt(line[3])) {
case 0:
playSound(line[4]);
break;
case 1:
muteAll = true;
break;
case 2:
muteAll = false;
break;
}
}
public void playSound(String identifier) {
Log.d("ply", "playSound - identifier");
int sound = mainActivity.getResources().getIdentifier(identifier, "raw", mainActivity.getPackageName());
stopPlayer();
if (!muteAll) {
mPlayer = MediaPlayer.create(mainActivity.context, sound);
mPlayer.start();
}
}
public void stopPlayer() {
if (mPlayer != null) {
mPlayer.stop();
mPlayer.release();
mPlayer = null;
}
}
public Bitmap createBitmapFromRelativeLayout(RelativeLayout view) {
view.setLayoutParams(new LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
view.draw(c);
return bitmap;
}
public void setWorld(long id_world) {
world.clear();
world = mainActivity.katbagHandler.selectWorldTypeSrcAndScaleFactorWorldForId(id_world);
Log.d("ply", "setWorld - world size:" + world.size());
if (world.size() > 0) {
if (world.get(WORLD_ARRAY_TYPE).contentEquals(WORLD_TYPE_COLOR)) {
setColorBackground(Integer.parseInt(world.get(WORLD_ARRAY_SRC)));
} else if (world.get(WORLD_ARRAY_TYPE).contentEquals(WORLD_TYPE_CAMERA) || world.get(WORLD_ARRAY_TYPE).contentEquals(WORLD_TYPE_LIBRARY)) {
mCurrentPhotoPath = world.get(WORLD_ARRAY_SRC);
setPictureBackground(world.get(WORLD_ARRAY_TYPE), Integer.parseInt(world.get(WORLD_ARRAY_SCALE_FACTOR)), id_world);
}
}
}
public void editMode() {
View line_vertical = (View) v.findViewById(R.id.player_line_vertical_editmode);
View line_horizontal = (View) v.findViewById(R.id.player_line_horizontal_editmode);
if (editMode) {
line_vertical.setVisibility(View.VISIBLE);
line_horizontal.setVisibility(View.VISIBLE);
} else {
line_vertical.setVisibility(View.GONE);
line_horizontal.setVisibility(View.GONE);
}
}
public void setColorBackground(int color) {
playerView.setBackgroundColor(color);
}
@SuppressWarnings("deprecation")
public void setPictureBackground(String type_world, int scaleFactor, long id_world) {
// Get the dimensions of the View
int targetW = playerView.getWidth();
int targetH = playerView.getHeight();
// Get the dimensions of the bitmap
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
int photoW = bmOptions.outWidth;
int photoH = bmOptions.outHeight;
// Determine how much to scale down the image
if (scaleFactor == -1) {
if (photoW != 0 && targetW != 0 && photoH != 0 && targetH != 0)
scaleFactor = Math.min(photoW / targetW, photoH / targetH);
else
scaleFactor = 1;
mainActivity.katbagHandler.updateWorld(id_world, type_world, mCurrentPhotoPath, scaleFactor);
}
// Decode the image file into a Bitmap sized to fill the View
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = scaleFactor;
bmOptions.inPurgeable = true;
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
} catch (OutOfMemoryError e) {
e.printStackTrace();
System.gc();
try {
bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath);
} catch (OutOfMemoryError e2) {
e2.printStackTrace();
// handle gracefully.
}
}
BitmapDrawable background = new BitmapDrawable(mainActivity.context.getResources(), bitmap);
playerView.setBackgroundDrawable(background);
}
@Override
public void onResume() {
String title = "";
if (editMode) {
title = name_app_text + " - " + getString(R.string.title_activity_player) + " " + getString(R.string.player_title_editmode);
} else {
title = name_app_text + " - " + getString(R.string.title_activity_player);
}
mainActivity.getSupportActionBar().setTitle(title);
editMode();
if (!MainActivity.TABLET)
mainActivity.slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
Log.d("onResume", "id_app: " + id_app);
super.onResume();
this.tracker.set(Fields.SCREEN_NAME, getClass().getSimpleName());
this.tracker.send( MapBuilder.createAppView().build() );
}
@Override
public void onPause() {
if (mainActivity.inBackground) {
getActivity().getSupportFragmentManager().popBackStack();
}
System.gc();
super.onPause();
}
@Override
public void onStop() {
if (useAccelerometer)
sensorManager.unregisterListener((SensorEventListener) this, accelerometer);
if (drawingUsesAccelerometer.size() > 0) {
for (int i = 0; i < drawingUsesAccelerometer.size(); i++) {
KatbagDrawing drawing = (KatbagDrawing) playerView.findViewById(drawingUsesAccelerometer.get(i));
drawing.sensorManager.unregisterListener((SensorEventListener) drawing.v, drawing.accelerometer);
}
}
if (drawingUsesAccelerometer.size() > 0) {
for (int i = 0; i < drawingUsesAccelerometer.size(); i++) {
KatbagDrawing drawing = (KatbagDrawing) playerView.findViewById(drawingUsesAccelerometer.get(i));
drawing.sensorManager.unregisterListener((SensorEventListener) drawing.v, drawing.accelerometer);
}
}
if (drawingUsesBounceThread.size() > 0) {
for (int i = 0; i < drawingUsesBounceThread.size(); i++) {
KatbagDrawing drawing = (KatbagDrawing) playerView.findViewById(drawingUsesBounceThread.get(i));
drawing.interruptBounce = true;
if (drawing.bounce != null) {
drawing.bounce.interrupt();
}
}
}
if (drawingUsesRandomly.size() > 0) {
for (int i = 0; i < drawingUsesRandomly.size(); i++) {
KatbagDrawing drawing = (KatbagDrawing) playerView.findViewById(drawingUsesRandomly.get(i));
drawing.interruptRandomly = true;
if (drawing.randomly != null) {
drawing.randomly.interrupt();
}
}
}
stopPlayer();
if (mHandler != null) {
mHandler.removeCallbacks(mRunnable);
}
if (mHandlerPlayer != null) {
mHandlerPlayer.removeCallbacks(mRunnablePlayer);
}
System.gc();
super.onStop();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
synchronized (this) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
long curTime = System.currentTimeMillis();
// only allow one update every 100ms.
if ((curTime - lastUpdate) > 100) {
long diffTime = (curTime - lastUpdate);
lastUpdate = curTime;
x = event.values[0];
y = event.values[1];
z = event.values[2];
float speed = (float) Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000;
if (speed > SHAKE_THRESHOLD) {
for (int i = 0; i < shakeBgn.size(); i++)
setBranchTreeCondition(shakeId.get(i), 1);
for (int i = 0; i < shakeBgn.size(); i++) {
if (checkTreeCondition(shakeId.get(i))) {
Log.d("ply", "shake - ini:" + shakeBgn.get(i) + ", last:" + shakeLst.get(i));
play(shakeBgn.get(i), shakeLst.get(i) + 1);
}
}
for (int i = 0; i < shakeBgn.size(); i++)
setBranchTreeCondition(shakeId.get(i), 0);
}
last_x = x;
last_y = y;
last_z = z;
}
}
}
}
}