Quellcode durchsuchen

Alpha 0.1.01
-Log cleaned
-Handle Error at runtime

François Gautrais vor 8 Jahren
Ursprung
Commit
458f7f395c
29 geänderte Dateien mit 673 neuen und 473 gelöschten Zeilen
  1. 2 2
      app/build.gradle
  2. 148 134
      app/src/main/java/app/ara/activities/ARActivity.java
  3. 15 8
      app/src/main/java/app/ara/activities/CreditsActivity.java
  4. 74 60
      app/src/main/java/app/ara/activities/ImageViewerActivity.java
  5. 18 16
      app/src/main/java/app/ara/activities/InfoActivity.java
  6. 83 61
      app/src/main/java/app/ara/activities/MediaViewerAcitvity.java
  7. 7 4
      app/src/main/java/app/ara/activities/MenuActivity.java
  8. 113 97
      app/src/main/java/app/ara/activities/ModelViewerActivity.java
  9. 1 1
      app/src/main/java/app/ara/activities/PermissionActivity.java
  10. 13 7
      app/src/main/java/app/ara/activities/ResourceListActivity.java
  11. 14 0
      app/src/main/java/app/ara/activities/SEMenuActivity.java
  12. 53 42
      app/src/main/java/app/ara/activities/SettingsActivity.java
  13. 1 1
      app/src/main/java/app/ara/activities/TransferActivity.java
  14. 1 2
      app/src/main/java/app/ara/ui/CameraPreview.java
  15. 1 5
      app/src/main/java/app/ara/ui/ResourceArrayAdapter.java
  16. 2 2
      app/src/main/java/app/ara/utils/AndroidResources.java
  17. 2 2
      app/src/main/java/app/ara/utils/GpsStub.java
  18. 1 1
      app/src/main/java/app/ara/utils/ResourceManager.java
  19. 104 0
      app/src/main/java/app/ara/utils/error/ErrorHandler.java
  20. 7 5
      app/src/main/java/app/ara/utils/files/FileManager.java
  21. 0 1
      app/src/main/java/app/ara/utils/files/JSONAssetsManager.java
  22. 1 1
      app/src/main/java/app/ara/utils/game/Area.java
  23. 3 9
      app/src/main/java/app/ara/utils/game/Game.java
  24. 1 1
      app/src/main/java/app/ara/utils/game/LocatedResources.java
  25. 4 3
      app/src/main/java/app/ara/utils/game/Place.java
  26. 1 1
      app/src/main/java/app/ara/utils/game/Player.java
  27. 2 3
      app/src/main/java/app/ara/utils/game/Resource.java
  28. 1 1
      app/src/main/java/app/ara/utils/game/Stage.java
  29. 0 3
      app/src/main/java/min3d/parser/AParser.java

+ 2 - 2
app/build.gradle

@@ -8,8 +8,8 @@ android {
         applicationId "app.ara"
         minSdkVersion 14
         targetSdkVersion 24
-        versionCode 1
-        versionName "alpha 1.0"
+        versionCode 2
+        versionName "alpha 0.1.01"
     }
     buildTypes {
         release {

+ 148 - 134
app/src/main/java/app/ara/activities/ARActivity.java

@@ -24,12 +24,13 @@ import java.util.ArrayList;
 import app.ara.ui.CameraPreview;
 import app.ara.utils.AndroidResources;
 import app.ara.utils.Settings;
-import app.ara.utils.app.brest.game.Area;
-import app.ara.utils.app.brest.game.Game;
-import app.ara.utils.app.brest.game.LocatedResources;
-import app.ara.utils.app.brest.game.Place;
-import app.ara.utils.app.brest.game.Resource;
-import app.ara.utils.app.brest.game.Stage;
+import app.ara.utils.error.ErrorHandler;
+import app.ara.utils.game.Area;
+import app.ara.utils.game.Game;
+import app.ara.utils.game.LocatedResources;
+import app.ara.utils.game.Place;
+import app.ara.utils.game.Resource;
+import app.ara.utils.game.Stage;
 import app.ara.utils.geometry.GPSPoint;
 import min3d.core.Object3d;
 import min3d.core.Object3dContainer;
@@ -81,7 +82,6 @@ public class ARActivity extends RendererActivity
 
 
         cameraPreviewLayout = (FrameLayout)findViewById(R.id.camera_preview);
-        Log.e("____", "Camera:");
         camera = checkDeviceCamera();
         mImageSurfaceView = new CameraPreview(ARActivity.this, camera);
 
@@ -100,10 +100,8 @@ public class ARActivity extends RendererActivity
         Camera mCamera = null;
         try {
             mCamera = Camera.open();
-            Log.e("____", "Camera OK "+mCamera);
 
         } catch (Exception e) {
-            Log.e("____", "Camera Fail "+mCamera);
             e.printStackTrace();
         }
         return mCamera;
@@ -255,60 +253,59 @@ public class ARActivity extends RendererActivity
 
     protected boolean updateSceneResource()
     {
-
-        ArrayList<LocatedResources> res = mGame.getResourcesNextToPlayer();
-        String toDisplay ="";
-        boolean detected = false;
-        boolean isAR = mGame.getmSettings().isARMode();
-        // String dete = "Detected:\n";
-        scene.clear();
+            ArrayList<LocatedResources> res = mGame.getResourcesNextToPlayer();
+            String toDisplay ="";
+            boolean detected = false;
+            boolean isAR = mGame.getmSettings().isARMode();
+            // String dete = "Detected:\n";
+            scene.clear();
 
 
-        if(mGame.getmSettings().isAreaDebug())
-        {
-            ArrayList<Area> ar = mGame.getAreaNextToPlayer();
-            String ttxt = "Zones trouvées:\n";
-            for(int i=0; i<ar.size(); i++)
-                ttxt+="\t"+ar.get(i).getName()+"\n";
-            toDisplay+=ttxt+"\n";
+            if(mGame.getmSettings().isAreaDebug())
+            {
+                ArrayList<Area> ar = mGame.getAreaNextToPlayer();
+                String ttxt = "Zones trouvées:\n";
+                for(int i=0; i<ar.size(); i++)
+                    ttxt+="\t"+ar.get(i).getName()+"\n";
+                toDisplay+=ttxt+"\n";
 
-        }
+            }
 
-        if(mGame.getmSettings().isAreaDebug()) toDisplay+="Resources détectées: \n";
+            if(mGame.getmSettings().isAreaDebug()) toDisplay+="Resources détectées: \n";
 
-        for (int i = 0; i < res.size(); i++) {
-            Resource rr = res.get(i).getResource(0);
-            Place p = res.get(i).getPlace();
-            if (rr != null) {
-                detected = true;
-                if(isAR) mGame.getPlayer().freezePosition(p.getLocation());
-                toDisplay=updateArSceneResource(rr, p, toDisplay);
+            for (int i = 0; i < res.size(); i++) {
+                Resource rr = res.get(i).getResource(0);
+                Place p = res.get(i).getPlace();
+                if (rr != null) {
+                    detected = true;
+                    if(isAR) mGame.getPlayer().freezePosition(p.getLocation());
+                    toDisplay=updateArSceneResource(rr, p, toDisplay);
+                }
             }
-        }
-        if(isAR && res.size()==0) mGame.getPlayer().releasePosition();
+            if(isAR && res.size()==0) mGame.getPlayer().releasePosition();
 
-        updateLed(detected, mGame.getResourcesNextToPlayerDistDouble());
+            updateLed(detected, mGame.getResourcesNextToPlayerDistDouble());
 
 
 
-        //affichage en debug
-        final String td = toDisplay;
-        final TextView xv = (TextView)findViewById(R.id.text_area);
-        xv.getHandler().post(new Runnable() { public void run() { xv.setText(td);  } });
+            //affichage en debug
+            final String td = toDisplay;
+            final TextView xv = (TextView)findViewById(R.id.text_area);
+            xv.getHandler().post(new Runnable() { public void run() { xv.setText(td);  } });
 
 
-        //affichage de la distance dans l'HUD
-        final String dete2 = mGame.getResourcesNextToPlayerDist();
-        mTvDistance.getHandler().post(new Runnable() {
-            public void run() {
-                mTvDistance.setText(dete2);
-            }
-        });
+            //affichage de la distance dans l'HUD
+            final String dete2 = mGame.getResourcesNextToPlayerDist();
+            mTvDistance.getHandler().post(new Runnable() {
+                public void run() {
+                    mTvDistance.setText(dete2);
+                }
+            });
 
-        if(mGame.getmSettings().isARMode())
-            return scene.numChildren()>0;
-        else
-            return res.size()>0;
+            if(mGame.getmSettings().isARMode())
+                return scene.numChildren()>0;
+            else
+                return res.size()>0;
     }
 
     protected void onList()
@@ -331,55 +328,60 @@ public class ARActivity extends RendererActivity
     protected void onCreate(Bundle savedInstanceState)
     {
         super.onCreate(savedInstanceState);
-
         requestWindowFeature(Window.FEATURE_NO_TITLE);
-        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
-        setContentView(R.layout.activity_ar);
-        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
-        //mGame = (Game) getIntent().getSerializableExtra("game");
-        mGame = Game.game();
-        mGame.newSensorManager(this);
-        mTvDistance=(TextView)findViewById(R.id.tv_distance);
-        mTvAngle=(TextView)findViewById(R.id.tv_angle);
-        mTvGPS=(TextView)findViewById(R.id.tv_gps);
-        mRlRoot=(RelativeLayout) findViewById(R.id.rl_root);
-        mIvWhite=(ImageView)findViewById(R.id.iv_white);
-        mIvRed=(ImageView)findViewById(R.id.iv_red);
-        mIvGreen=(ImageView)findViewById(R.id.iv_green);
-        mIvNone=(ImageView)findViewById(R.id.iv_none);
-
-
-
-        ViewTreeObserver vto = mRlRoot.getViewTreeObserver();
-        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
-            @Override
-            public void onGlobalLayout() {
-                mRlRoot.getViewTreeObserver().removeGlobalOnLayoutListener(this);
-                int w =mViewWidth  = mRlRoot.getMeasuredWidth();
-                int h =mViewHeight = mRlRoot.getMeasuredHeight();
-
-                mTvGPS.setTextSize(pxToDp((int)(h*0.100f/3.5)));
-                mTvGPS.setText("N ?°\nE ?°");
-                mTvAngle.setTextSize(pxToDp((int)(h*0.121f/3.5)));
-                mTvDistance.setTextSize(pxToDp((int)(h*0.046f)));
-
-                moveView(mTvAngle, (int)(0.03*w), (int)(0.864f*h), (int)(0.291f*w), (int)(0.121*h ));
-                moveView(mTvGPS, w-(int)(0.32f*w), (int)(0.875f*h),(int)(0.3*w), (int)(0.121*h));
-                moveView(mTvDistance, w-mTvDistance.getWidth()-(int)(0.36f*w), (int)(0.033f*h), mTvGPS.getWidth(), (int)(0.121*h));
-
-                moveView(mIvNone, (int)(w/4.0), 0, (int)(w/2.0), (int)(0.06f*h));
-                moveView(mIvWhite, (int)(w*0.269), (int)(0.034*h), (int)(w*0.03333), (int)(0.02286f*h));
-                moveView(mIvRed, (int)(w*0.702), (int)(0.034*h), (int)(w*0.03333), (int)(0.02286f*h));
-                moveView(mIvGreen, (int)(w*0.702), (int)(0.034*h), (int)(w*0.03333), (int)(0.02286f*h));
-            }
-        });
+        try{
+            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+            setContentView(R.layout.activity_ar);
+            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+            //mGame = (Game) getIntent().getSerializableExtra("game");
+            mGame = Game.game();
+            mGame.newSensorManager(this);
+            mTvDistance=(TextView)findViewById(R.id.tv_distance);
+            mTvAngle=(TextView)findViewById(R.id.tv_angle);
+            mTvGPS=(TextView)findViewById(R.id.tv_gps);
+            mRlRoot=(RelativeLayout) findViewById(R.id.rl_root);
+            mIvWhite=(ImageView)findViewById(R.id.iv_white);
+            mIvRed=(ImageView)findViewById(R.id.iv_red);
+            mIvGreen=(ImageView)findViewById(R.id.iv_green);
+            mIvNone=(ImageView)findViewById(R.id.iv_none);
+
+
+
+            ViewTreeObserver vto = mRlRoot.getViewTreeObserver();
+            vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+                @Override
+                public void onGlobalLayout() {
+                    mRlRoot.getViewTreeObserver().removeGlobalOnLayoutListener(this);
+                    int w =mViewWidth  = mRlRoot.getMeasuredWidth();
+                    int h =mViewHeight = mRlRoot.getMeasuredHeight();
+
+                    mTvGPS.setTextSize(pxToDp((int)(h*0.100f/3.5)));
+                    mTvGPS.setText("N ?°\nE ?°");
+                    mTvAngle.setTextSize(pxToDp((int)(h*0.121f/3.5)));
+                    mTvDistance.setTextSize(pxToDp((int)(h*0.046f)));
+
+                    moveView(mTvAngle, (int)(0.03*w), (int)(0.864f*h), (int)(0.291f*w), (int)(0.121*h ));
+                    moveView(mTvGPS, w-(int)(0.32f*w), (int)(0.875f*h),(int)(0.3*w), (int)(0.121*h));
+                    moveView(mTvDistance, w-mTvDistance.getWidth()-(int)(0.36f*w), (int)(0.033f*h), mTvGPS.getWidth(), (int)(0.121*h));
+
+                    moveView(mIvNone, (int)(w/4.0), 0, (int)(w/2.0), (int)(0.06f*h));
+                    moveView(mIvWhite, (int)(w*0.269), (int)(0.034*h), (int)(w*0.03333), (int)(0.02286f*h));
+                    moveView(mIvRed, (int)(w*0.702), (int)(0.034*h), (int)(w*0.03333), (int)(0.02286f*h));
+                    moveView(mIvGreen, (int)(w*0.702), (int)(0.034*h), (int)(w*0.03333), (int)(0.02286f*h));
+                }
+            });
 
 
 
-        int w = mRlRoot.getWidth();
-        int h = mRlRoot.getHeight();
+            int w = mRlRoot.getWidth();
+            int h = mRlRoot.getHeight();
 
-        mGame.printStage();
+            mGame.printStage();
+        }catch(Exception e)
+        {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
+        }
 
     }
 
@@ -392,47 +394,54 @@ public class ARActivity extends RendererActivity
      */
     public  void updateScene()
     {
-        synchronized (mUpdate)
+        try
         {
-            if(!mUpdate) return;
+            synchronized (mUpdate)
+            {
+                if(!mUpdate) return;
+
+                //Precache du modèle 3D
+                synchronized (mLock) {
+                    if (!isPausing) {
+                        boolean b = mGame.precache3DResource(this);
+                        mIsResource = updateSceneResource();
+                    }else
+                    {
+                        scene.clear();
+                        mGame.removeCached3DModels();
+                    }
+                }
 
-            //Precache du modèle 3D
-            synchronized (mLock) {
-                if (!isPausing) {
-                    boolean b = mGame.precache3DResource(this);
-                    mIsResource = updateSceneResource();
+                if(mIsResource) {
+                    mOkButton.getHandler().post(new Runnable() {
+                        public void run() {
+                            mOkButton.setVisibility(View.VISIBLE);
+                        }
+                    });
                 }else
                 {
-                    scene.clear();
-                    mGame.removeCached3DModels();
-                }
-            }
+                    mOkButton.getHandler().post(new Runnable() {
+                        public void run() {
+                            mOkButton.setVisibility(View.INVISIBLE);
+                        }
+                    });
 
-            if(mIsResource) {
-                mOkButton.getHandler().post(new Runnable() {
-                    public void run() {
-                        mOkButton.setVisibility(View.VISIBLE);
-                    }
-                });
-            }else
-            {
-                mOkButton.getHandler().post(new Runnable() {
+                }
+                mTvAngle.getHandler().post(new Runnable() {
                     public void run() {
-                        mOkButton.setVisibility(View.INVISIBLE);
+                        NumberFormat formatter = new DecimalFormat("#0.0");
+                        mTvAngle.setText("X : "+formatter.format(mGame.getPlayer().getOrientation())+"°\nY : "+
+                                formatter.format(mGame.getPlayer().getOrientationY())
+                                +"°\nZ : "+formatter.format(mGame.getPlayer().getOrientationZ())+"°");
                     }
                 });
 
+                setGpsText();
             }
-            mTvAngle.getHandler().post(new Runnable() {
-                public void run() {
-                    NumberFormat formatter = new DecimalFormat("#0.0");
-                    mTvAngle.setText("X : "+formatter.format(mGame.getPlayer().getOrientation())+"°\nY : "+
-                            formatter.format(mGame.getPlayer().getOrientationY())
-                            +"°\nZ : "+formatter.format(mGame.getPlayer().getOrientationZ())+"°");
-                }
-            });
-
-            setGpsText();
+        }catch(Exception e)
+        {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
         }
 
     }
@@ -483,7 +492,7 @@ public class ARActivity extends RendererActivity
 
     public void finish()
     {
-        mGame.stopSensors();
+        if(mGame!=null)mGame.stopSensors();
         super.finish();
     }
 
@@ -530,7 +539,7 @@ public class ARActivity extends RendererActivity
 
         if(finished)
         {
-            Log.e("Finished", "Finished");
+            Log.i("app.ara: ARA", "Finished");
         }
 
         if(stageFinished)
@@ -542,14 +551,12 @@ public class ARActivity extends RendererActivity
                 Intent intent2 = new Intent(this, EndActivity.class);
                 startActivity(intent2);
             }
-            System.out.println("Ressource: '"+s.getResourceName()+"' : "+!s.getResourceName().isEmpty());
             if(!s.getResourceName().isEmpty() && s.isTransition())
             {
                 Intent intent = AndroidResources.getViewerIntent(this, stageRes);
                 startActivity(intent);
             }
 
-            System.out.println("Transition: '"+s.isTransition());
             if(s.isTransition())
             {
                 Intent intent2 = new Intent(this, TransferActivity.class);
@@ -587,12 +594,19 @@ public class ARActivity extends RendererActivity
     public void onClickScreen(View v)
 
     {
-        if(mIsResource)
-            onClickPickUp(v);
-        else if(Settings.getSettings().isGPSDebug())
-            mGame.getPlayer().nextStub();
-        else {
+        try{
+            if(mIsResource)
+                onClickPickUp(v);
+            else if(Settings.getSettings().isGPSDebug())
+                mGame.getPlayer().nextStub();
+            else {
+
+            }
 
+        }catch(Exception e)
+        {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
         }
     }
 

+ 15 - 8
app/src/main/java/app/ara/activities/CreditsActivity.java

@@ -6,6 +6,7 @@ import android.text.Html;
 import android.widget.TextView;
 
 import app.ara.utils.FontChangeCrawler;
+import app.ara.utils.error.ErrorHandler;
 
 public class CreditsActivity extends AppCompatActivity {
 
@@ -41,15 +42,21 @@ public class CreditsActivity extends AppCompatActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_credits);
-        mText = (TextView) findViewById(R.id.tv_credits);
-        if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N) {
-            mText.setText(Html.fromHtml(CREDITS));
-        }else
+        try{
+            setContentView(R.layout.activity_credits);
+            mText = (TextView) findViewById(R.id.tv_credits);
+            if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N) {
+                mText.setText(Html.fromHtml(CREDITS));
+            }else
+            {
+                mText.setText(Html.fromHtml(CREDITS, Html.FROM_HTML_MODE_COMPACT));
+            }
+
+            FontChangeCrawler.setFont(this);
+        }catch(Exception e)
         {
-            mText.setText(Html.fromHtml(CREDITS, Html.FROM_HTML_MODE_COMPACT));
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
         }
-
-        FontChangeCrawler.setFont(this);
     }
 }

+ 74 - 60
app/src/main/java/app/ara/activities/ImageViewerActivity.java

@@ -3,39 +3,33 @@ package app.ara.activities;
 import android.app.Activity;
 import android.content.Intent;
 import android.graphics.Bitmap;
-import android.support.v4.view.MotionEventCompat;
 import android.os.Bundle;
 import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
-import android.view.MotionEvent;
 import android.view.View;
 import android.widget.Button;
-import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.TextView;
 
 import app.ara.utils.AndroidResources;
 import app.ara.utils.FontChangeCrawler;
-import app.ara.utils.app.brest.game.Resource;
+import app.ara.utils.error.ErrorHandler;
+import app.ara.utils.game.Resource;
 import app.ara.utils.files.FileManager;
-import app.ara.utils.geometry.Point;
-import min3d.core.Object3d;
-import min3d.core.RendererActivity;
-import min3d.vos.CameraVo;
-import min3d.vos.Light;
 import uk.co.senab.photoview.PhotoViewAttacher;
 
 /**
  * An example full-screen activity that shows and hides the system UI (i.e.
  * status bar and navigation/system bar) with user interaction.
  */
-public class ImageViewerActivity extends AppCompatActivity implements IViewerActivity{
+public class ImageViewerActivity extends Activity implements IViewerActivity{
 
 
     private Resource mResource;
     private ImageView mImageView;
     private Button mButton;
     private PhotoViewAttacher mAttacher;
+    private boolean mIsMap=false;
 
 
     public static final int CONTENT_NULL=0;
@@ -49,82 +43,102 @@ public class ImageViewerActivity extends AppCompatActivity implements IViewerAct
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_viewer);
-        mImageView = (ImageView) findViewById(R.id.imageView);
-        mButton = (Button) findViewById(R.id.info);
-        if(getIntent().hasExtra("resource"))
-        {
-            mResource = (Resource) getIntent().getSerializableExtra("resource");
-            if(mResource!=null) setTitle(mResource.getTitle());
-        }
 
-        final TextView title = (TextView) findViewById(R.id.title);
-        title.setVisibility(View.VISIBLE);
+        try {
+            mImageView = (ImageView) findViewById(R.id.imageView);
+            mButton = (Button) findViewById(R.id.info);
+            if (getIntent().hasExtra("resource")) {
+                mResource = (Resource) getIntent().getSerializableExtra("resource");
+                if (mResource != null) setTitle(mResource.getTitle());
+            }
 
-        if(mResource != null && !getIntent().hasExtra("information") && !getIntent().hasExtra("map"))
-        {
-            Log.e("__________", "Info loaded");
-            title.setText(mResource.getTitle());
-            if(mResource.isImage())
-            {
-                mContent=CONTENT_IMAGE;
-                Bitmap bmp=null;
+            final TextView title = (TextView) findViewById(R.id.title);
+            title.setVisibility(View.VISIBLE);
+
+            if (mResource != null && !getIntent().hasExtra("information") && !getIntent().hasExtra("map")) {
+                title.setText(mResource.getTitle());
+                if (mResource.isImage()) {
+                    mContent = CONTENT_IMAGE;
+                    Bitmap bmp = null;
+                    try {
+                        bmp = FileManager.openImage(this, mResource.getName());
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+
+                    mImageView.setImageBitmap(bmp);
+                    mAttacher = new PhotoViewAttacher(mImageView);
+                    mAttacher.setMaximumScale(20);
+
+                }
+
+            } else if (getIntent().hasExtra("map")) {
+                mContent = CONTENT_MAP;
+                Bitmap bmp = null;
                 try {
-                    bmp = FileManager.openImage(this, mResource.getName());
+                    bmp = FileManager.openImage(this, "map");
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
-
+                title.setVisibility(View.GONE);
                 mImageView.setImageBitmap(bmp);
                 mAttacher = new PhotoViewAttacher(mImageView);
                 mAttacher.setMaximumScale(20);
-
-            }
-
-        } else if(getIntent().hasExtra("map") )
-        {
-            Log.e("__________", "Map loaded");
-            mContent=CONTENT_MAP;
-            Bitmap bmp=null;
-            try {
-                bmp = FileManager.openImage(this, "map");
-            } catch (Exception e) {
-                e.printStackTrace();
+                mButton.setVisibility(View.GONE);
+                mIsMap=true;
+            } else {
+                title.setText("Erreur");
             }
-            title.setVisibility(View.GONE);
-            mImageView.setImageBitmap(bmp);
-            mAttacher = new PhotoViewAttacher(mImageView);
-            mAttacher.setMaximumScale(20);
-            mButton.setVisibility(View.GONE);
-        }else
+            FontChangeCrawler.setFont(this);
+        }catch(Exception e)
         {
-            Log.e("__________", "Erreur");
-            title.setText("Erreur");
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
         }
-        FontChangeCrawler.setFont(this);
 
     }
 
     public void onClickInfo(View v)
     {
-        Intent intent = AndroidResources.getInfoIntent(this, mResource);
-        startActivity(intent);
+        try {
+            Intent intent = AndroidResources.getInfoIntent(this, mResource);
+            startActivity(intent);
+        }catch(Exception e)
+        {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
+        }
     }
 
 
     public void onClick(View v)
     {
-        if(mContent==CONTENT_IMAGE) {
+        try {
+            if (mContent == CONTENT_IMAGE) {
 
-            final TextView title = (TextView) findViewById(R.id.title);
-            if (title.getVisibility() == View.VISIBLE) {
-                title.setVisibility(View.GONE);
-                mButton.setVisibility(View.GONE);
-            } else {
+                final TextView title = (TextView) findViewById(R.id.title);
+                if (title.getVisibility() == View.VISIBLE) {
+                    title.setVisibility(View.GONE);
+                    mButton.setVisibility(View.GONE);
+                } else {
 
-                title.setVisibility(View.VISIBLE);
-                mButton.setVisibility(View.VISIBLE);
+                    title.setVisibility(View.VISIBLE);
+                    mButton.setVisibility(View.VISIBLE);
+                }
             }
+        }catch(Exception e)
+        {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
         }
     }
 
+
+    public void onBackPressed() {
+        TextView title = (TextView) findViewById(R.id.title);
+        if(!mIsMap && title.getVisibility() != View.VISIBLE)
+        {
+            onClick(null);
+        }else super.onBackPressed();
+    }
 }

+ 18 - 16
app/src/main/java/app/ara/activities/InfoActivity.java

@@ -2,12 +2,11 @@ package app.ara.activities;
 
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
-import android.widget.Button;
-import android.widget.FrameLayout;
 import android.widget.TextView;
 
 import app.ara.utils.FontChangeCrawler;
-import app.ara.utils.app.brest.game.Resource;
+import app.ara.utils.error.ErrorHandler;
+import app.ara.utils.game.Resource;
 
 public class InfoActivity extends AppCompatActivity  implements IViewerActivity{
 
@@ -20,20 +19,23 @@ public class InfoActivity extends AppCompatActivity  implements IViewerActivity{
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_info);
 
-        mTitle = (TextView) findViewById(R.id.title);
-        mText = (TextView) findViewById(R.id.tv_comment);
-
-        if(getIntent().hasExtra("resource"))
-        {
-            mResource = (Resource) getIntent().getSerializableExtra("resource");
-            if(mResource!=null) setTitle(mResource.getTitle());
-            mTitle.setText(mResource.getTitle());
-            mText.setText(mResource.getComment());
-        }else
+        try {
+            mTitle = (TextView) findViewById(R.id.title);
+            mText = (TextView) findViewById(R.id.tv_comment);
+
+            if (getIntent().hasExtra("resource")) {
+                mResource = (Resource) getIntent().getSerializableExtra("resource");
+                if (mResource != null) setTitle(mResource.getTitle());
+                mTitle.setText(mResource.getTitle());
+                mText.setText(mResource.getComment());
+            } else {
+                mTitle.setText("Error: Res not found");
+            }
+            FontChangeCrawler.setFont(this);
+        }catch(Exception e)
         {
-            mTitle.setText("Error: Res not found");
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
         }
-        FontChangeCrawler.setFont(this);
-
     }
 }

+ 83 - 61
app/src/main/java/app/ara/activities/MediaViewerAcitvity.java

@@ -5,10 +5,7 @@ import android.media.MediaPlayer;
 import android.os.Handler;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.View;
-import android.view.Window;
-import android.view.WindowManager;
 import android.widget.FrameLayout;
 import android.widget.Button;
 import android.widget.ImageButton;
@@ -16,12 +13,11 @@ import android.widget.ImageView;
 import android.widget.SeekBar;
 import android.widget.TextView;
 
-import java.util.Timer;
-
 import app.ara.ui.MediaView;
 import app.ara.utils.AndroidResources;
 import app.ara.utils.FontChangeCrawler;
-import app.ara.utils.app.brest.game.Resource;
+import app.ara.utils.error.ErrorHandler;
+import app.ara.utils.game.Resource;
 
 public class MediaViewerAcitvity extends AppCompatActivity implements MediaPlayer.OnSeekCompleteListener,
                                                                 MediaView.OnStartListener,
@@ -47,98 +43,124 @@ public class MediaViewerAcitvity extends AppCompatActivity implements MediaPlaye
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_media);
 
-        mFrameLayout = (FrameLayout) findViewById(R.id.media_viewer);
-        mButton = (ImageButton) findViewById(R.id.play);
-        mInfo = (Button) findViewById(R.id.info);
-        mBar = (SeekBar) findViewById(R.id.seekBar);
-        mBar.setOnSeekBarChangeListener(this);
+        try {
+            mFrameLayout = (FrameLayout) findViewById(R.id.media_viewer);
+            mButton = (ImageButton) findViewById(R.id.play);
+            mInfo = (Button) findViewById(R.id.info);
+            mBar = (SeekBar) findViewById(R.id.seekBar);
+            mBar.setOnSeekBarChangeListener(this);
 
-        mTitle = (TextView) findViewById(R.id.title);
-        mAutoSeek = new AutoSeek(mHandler);
+            mTitle = (TextView) findViewById(R.id.title);
+            mAutoSeek = new AutoSeek(mHandler);
 
-        mMediaView = new MediaView(this);
-        mMediaView.setOnStartListener(this);
-        mImageView = new ImageView(this);
-        mImageView.setImageResource(R.drawable.audio);
+            mMediaView = new MediaView(this);
+            mMediaView.setOnStartListener(this);
+            mImageView = new ImageView(this);
+            mImageView.setImageResource(R.drawable.audio);
 
-        mFrameLayout.addView(mMediaView);
-        mFrameLayout.addView(mImageView);
+            mFrameLayout.addView(mMediaView);
+            mFrameLayout.addView(mImageView);
 
 
-        if(getIntent().hasExtra("resource"))
-        {
-            mResource = (Resource) getIntent().getSerializableExtra("resource");
-            if(mResource==null) return;
+            if (getIntent().hasExtra("resource")) {
+                mResource = (Resource) getIntent().getSerializableExtra("resource");
+                if (mResource == null) return;
 
-            mTitle.setText(mResource.getTitle());
+                mTitle.setText(mResource.getTitle());
 
-            String path=mResource.getName();
-            if(mResource.isAudio())
-            {
-                path+="_audio";
-                mImageView.setVisibility(View.VISIBLE);
-            }
-            else
-            {
-                path+="_video";
-                mImageView.setVisibility(View.GONE);
-            }
+                String path = mResource.getName();
+                if (mResource.isAudio()) {
+                    path += "_audio";
+                    mImageView.setVisibility(View.VISIBLE);
+                } else {
+                    path += "_video";
+                    mImageView.setVisibility(View.GONE);
+                }
 
-            mMediaView.play(path);
+                mMediaView.play(path);
+            }
+            FontChangeCrawler.setFont(this);
+        }catch(Exception e)
+        {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
         }
-        FontChangeCrawler.setFont(this);
-
 
     }
 
     public void onFullscreen(View v)
     {
-        if(mTitle.getVisibility()==View.VISIBLE)
-        {
-            mTitle.setVisibility(View.GONE);
-            mInfo.setVisibility(View.GONE);
-        }else
+        try {
+            if (mTitle.getVisibility() == View.VISIBLE) {
+                mTitle.setVisibility(View.GONE);
+                mInfo.setVisibility(View.GONE);
+            } else {
+                mTitle.setVisibility(View.VISIBLE);
+                mInfo.setVisibility(View.VISIBLE);
+            }
+        }catch(Exception e)
         {
-            mTitle.setVisibility(View.VISIBLE);
-            mInfo.setVisibility(View.VISIBLE);
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
         }
     }
 
     public void onPlayPause(View v)
     {
-        if(mMediaView.isPlaying())
-        {
-            mAutoSeek.stop();
-            mButton.setImageResource(android.R.drawable.ic_media_play);
-            mMediaView.pause();
-        }else
+        try {
+            if (mMediaView.isPlaying()) {
+                mAutoSeek.stop();
+                mButton.setImageResource(android.R.drawable.ic_media_play);
+                mMediaView.pause();
+            } else {
+                mAutoSeek.start();
+                mButton.setImageResource(android.R.drawable.ic_media_pause);
+                mMediaView.start();
+            }
+        }catch(Exception e)
         {
-            mAutoSeek.start();
-            mButton.setImageResource(android.R.drawable.ic_media_pause);
-            mMediaView.start();
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
         }
     }
 
     public void onInfos(View v)
     {
-        Intent intent = AndroidResources.getInfoIntent(this, mResource);
-        startActivity(intent);
+        try {
+            Intent intent = AndroidResources.getInfoIntent(this, mResource);
+            startActivity(intent);
+        }catch(Exception e)
+        {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
+        }
     }
 
     @Override
     public void onSeekComplete(MediaPlayer mediaPlayer) {
-        mAutoSeek.start();
-        mButton.setImageResource(android.R.drawable.ic_media_pause);
+        try {
+            mAutoSeek.start();
+            mButton.setImageResource(android.R.drawable.ic_media_pause);
+        }catch(Exception e)
+        {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
+        }
     }
 
 
 
     public void onUpdateSeek()
     {
-        if(mMediaView.isPlaying())
+        try {
+            if (mMediaView.isPlaying()) {
+                mCurrentTime = mMediaView.getTime() / 1000;
+                mBar.setProgress(mCurrentTime);
+            }
+        }catch(Exception e)
         {
-            mCurrentTime=mMediaView.getTime()/1000;
-            mBar.setProgress(mCurrentTime);
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
         }
     }
 

+ 7 - 4
app/src/main/java/app/ara/activities/MenuActivity.java

@@ -17,9 +17,10 @@ import app.ara.ui.RotateButton;
 import app.ara.utils.AndroidResources;
 import app.ara.utils.FontChangeCrawler;
 import app.ara.utils.Settings;
-import app.ara.utils.app.brest.game.Game;
-import app.ara.utils.app.brest.game.Resource;
-import app.ara.utils.app.brest.game.Stage;
+import app.ara.utils.error.ErrorHandler;
+import app.ara.utils.game.Game;
+import app.ara.utils.game.Resource;
+import app.ara.utils.game.Stage;
 
 public abstract class  MenuActivity extends Activity implements View.OnClickListener, IViewerActivity{
 
@@ -43,7 +44,7 @@ public abstract class  MenuActivity extends Activity implements View.OnClickList
     protected View mBMenu;
     protected Button mBSend;
     protected int mHOffset=0;
-
+    protected boolean m_isFirstLaunch=true;
 
     protected  void refreshMenuStyle(){}
 
@@ -107,6 +108,7 @@ public abstract class  MenuActivity extends Activity implements View.OnClickList
             mGame = g;
             Game.setGame(mGame);
             mGame.newSensorManager(this);
+            m_isFirstLaunch=false;
             Toast.makeText(this, "Chargement", Toast.LENGTH_LONG).show();
         } else if (mGame == null) {
             mGame = new Game("game_medium", this);
@@ -214,6 +216,7 @@ public abstract class  MenuActivity extends Activity implements View.OnClickList
         super.onResume();
         mGame = Game.game();
         refreshMenuStyle();
+        ErrorHandler.handle(this);
     }
 
     protected void sendVisibility()

+ 113 - 97
app/src/main/java/app/ara/activities/ModelViewerActivity.java

@@ -2,7 +2,6 @@ package app.ara.activities;
 
 import android.content.Intent;
 import android.support.v4.view.MotionEventCompat;
-import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.view.MotionEvent;
 import android.view.View;
@@ -12,7 +11,8 @@ import android.widget.TextView;
 
 import app.ara.utils.AndroidResources;
 import app.ara.utils.FontChangeCrawler;
-import app.ara.utils.app.brest.game.Resource;
+import app.ara.utils.error.ErrorHandler;
+import app.ara.utils.game.Resource;
 import app.ara.utils.geometry.Point;
 import min3d.core.Object3d;
 import min3d.core.RendererActivity;
@@ -39,50 +39,64 @@ public class ModelViewerActivity extends RendererActivity  implements View.OnTou
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_model_viewer);
 
-        mInfo = (Button) findViewById(R.id.info);
-        mFrameLayout = (FrameLayout) findViewById(R.id.frame_viewer);
-        mTitle = (TextView) findViewById(R.id.title);
-
-        if(getIntent().hasExtra("resource"))
-        {
-            mResource = (Resource) getIntent().getSerializableExtra("resource");
-            if(mResource!=null) setTitle(mResource.getTitle());
-            mFrameLayout.addView(_glSurfaceView);
-            mTitle.setText(mResource.getTitle());
-        }else
+        try {
+            mInfo = (Button) findViewById(R.id.info);
+            mFrameLayout = (FrameLayout) findViewById(R.id.frame_viewer);
+            mTitle = (TextView) findViewById(R.id.title);
+
+            if (getIntent().hasExtra("resource")) {
+                mResource = (Resource) getIntent().getSerializableExtra("resource");
+                if (mResource != null) setTitle(mResource.getTitle());
+                mFrameLayout.addView(_glSurfaceView);
+                mTitle.setText(mResource.getTitle());
+            } else {
+                mTitle.setText("Error: Res not found");
+            }
+            FontChangeCrawler.setFont(this);
+        }catch(Exception e)
         {
-            mTitle.setText("Error: Res not found");
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
         }
-        FontChangeCrawler.setFont(this);
-
 
     }
 
     public void onClickInfo(View v)
     {
-        Intent intent = AndroidResources.getInfoIntent(this, mResource);
-        startActivity(intent);
+        try {
+            Intent intent = AndroidResources.getInfoIntent(this, mResource);
+            startActivity(intent);
+        }catch(Exception e)
+        {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
+        }
     }
 
     public void initScene()
     {
-
-        scene.backgroundColor().setAll(0x00000000);
-
-        Light myLight = new Light();
-        myLight.position.setZ(0);
-        myLight.position.setY(0);
-        myLight.type(LightType.POSITIONAL);
-
-        scene.lights().add(myLight);
-        Object3d oo = mResource.get3DModel(this);
-        oo.position().z=mResource.getPosition().z;
-        oo.position().y=mResource.getPosition().y;
-        oo.position().x=mResource.getPosition().x;
-        oo.position().z-=20;
-        mCamera.frustum.zFar(0.1f);
-        mCamera.frustum.zFar(1000);
-        scene.addChild(mResource.get3DModel(this));
+        try {
+            scene.backgroundColor().setAll(0x00000000);
+
+            Light myLight = new Light();
+            myLight.position.setZ(0);
+            myLight.position.setY(0);
+            myLight.type(LightType.POSITIONAL);
+
+            scene.lights().add(myLight);
+            Object3d oo = mResource.get3DModel(this);
+            oo.position().z = mResource.getPosition().z;
+            oo.position().y = mResource.getPosition().y;
+            oo.position().x = mResource.getPosition().x;
+            oo.position().z -= 20;
+            mCamera.frustum.zFar(0.1f);
+            mCamera.frustum.zFar(1000);
+            scene.addChild(mResource.get3DModel(this));
+        }catch(Exception e)
+        {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
+        }
     }
 
     @Override
@@ -92,75 +106,77 @@ public class ModelViewerActivity extends RendererActivity  implements View.OnTou
 
     @Override
     public boolean onTouch(View view, MotionEvent motionEvent) {
-        float x = motionEvent.getX();
-        float y = motionEvent.getY();
-        final int action = motionEvent.getAction()%256;
-        int index = MotionEventCompat.getActionIndex(motionEvent);
-
-        if (motionEvent.getPointerCount() > 1) {
-            switch (action) {
-                case MotionEvent.ACTION_MOVE:
-                {
-                    if(!mIsZooming) break;
-                    Point a = new Point(motionEvent.getX(0), motionEvent.getY(0));
-                    Point b = new Point(motionEvent.getX(1), motionEvent.getY(1));
-                    double d = a.getDistanceWith(b);
-                    double delta = d - mPreviousDist;
-                    mCamera.position.z+=delta/2;
-                    mPreviousDist = (float)a.getDistanceWith(b);
-                    scene.camera(mCamera);
-                    break;
-                }
-                case MotionEvent.ACTION_POINTER_DOWN:
-                case MotionEvent.ACTION_DOWN: {
-                    Point a = new Point(motionEvent.getX(0), motionEvent.getY(0));
-                    Point b = new Point(motionEvent.getX(1), motionEvent.getY(1));
-                    mPreviousDist = (float)a.getDistanceWith(b);
-                    mIsZooming=true;
-                    break;
+        try {
+            float x = motionEvent.getX();
+            float y = motionEvent.getY();
+            final int action = motionEvent.getAction() % 256;
+            int index = MotionEventCompat.getActionIndex(motionEvent);
+
+            if (motionEvent.getPointerCount() > 1) {
+                switch (action) {
+                    case MotionEvent.ACTION_MOVE: {
+                        if (!mIsZooming) break;
+                        Point a = new Point(motionEvent.getX(0), motionEvent.getY(0));
+                        Point b = new Point(motionEvent.getX(1), motionEvent.getY(1));
+                        double d = a.getDistanceWith(b);
+                        double delta = d - mPreviousDist;
+                        mCamera.position.z += delta / 2;
+                        mPreviousDist = (float) a.getDistanceWith(b);
+                        scene.camera(mCamera);
+                        break;
+                    }
+                    case MotionEvent.ACTION_POINTER_DOWN:
+                    case MotionEvent.ACTION_DOWN: {
+                        Point a = new Point(motionEvent.getX(0), motionEvent.getY(0));
+                        Point b = new Point(motionEvent.getX(1), motionEvent.getY(1));
+                        mPreviousDist = (float) a.getDistanceWith(b);
+                        mIsZooming = true;
+                        break;
+                    }
+                    case MotionEvent.ACTION_UP:
+                    case MotionEvent.ACTION_POINTER_UP:
+                    case MotionEvent.ACTION_CANCEL:
+                        mIsZooming = false;
+                        mIsMoving = false;
+                        break;
                 }
-                case MotionEvent.ACTION_UP:
-                case MotionEvent.ACTION_POINTER_UP:
-                case MotionEvent.ACTION_CANCEL:
-                    mIsZooming=false;
-                    mIsMoving=false;
-                    break;
-            }
 
 
-        }
-        else {
-            mIsZooming=false;
-            switch (motionEvent.getAction()) {
-                case MotionEvent.ACTION_MOVE:
-                {
-                    if(!mIsMoving) break;
-                    float dx = x - mPreviousX;
-                    float dy = y - mPreviousY;
-                    Object3d oo = mResource.get3DModel(this);
-
-                    oo.rotation().y += dx / 3;
-                    oo.rotation().x += dy / 3;
-                    _glSurfaceView.requestRender();
-
-
-                    break;
+            } else {
+                mIsZooming = false;
+                switch (motionEvent.getAction()) {
+                    case MotionEvent.ACTION_MOVE: {
+                        if (!mIsMoving) break;
+                        float dx = x - mPreviousX;
+                        float dy = y - mPreviousY;
+                        Object3d oo = mResource.get3DModel(this);
+
+                        oo.rotation().y += dx / 3;
+                        oo.rotation().x += dy / 3;
+                        _glSurfaceView.requestRender();
+
+
+                        break;
+                    }
+                    case MotionEvent.ACTION_DOWN:
+                        mIsMoving = true;
+                        break;
+                    case MotionEvent.ACTION_UP:
+                    case MotionEvent.ACTION_CANCEL:
+                        mIsMoving = false;
+                        mIsZooming = false;
+                        break;
                 }
-                case MotionEvent.ACTION_DOWN:
-                    mIsMoving=true;
-                    break;
-                case MotionEvent.ACTION_UP:
-                case MotionEvent.ACTION_CANCEL:
-                    mIsMoving=false;
-                    mIsZooming=false;
-                    break;
+                mPreviousX = x;
+                mPreviousY = y;
             }
-            mPreviousX = x;
-            mPreviousY = y;
-        }
 
 
-        return true;
 
+        } catch (Exception e) {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
+        }
+        return true;
     }
 }

+ 1 - 1
app/src/main/java/app/ara/activities/PermissionActivity.java

@@ -69,7 +69,7 @@ public class PermissionActivity extends AppCompatActivity {
             al.add(Manifest.permission.ACCESS_COARSE_LOCATION);
         } else m_nPerm--;
 
-        ActivityCompat.requestPermissions(this,al.toArray(new String[m_nPerm]), ALL_PERMISSIONS);
+        if(al.size()>0) ActivityCompat.requestPermissions(this,al.toArray(new String[m_nPerm]), ALL_PERMISSIONS);
 
 
     }

+ 13 - 7
app/src/main/java/app/ara/activities/ResourceListActivity.java

@@ -8,8 +8,9 @@ import java.util.ArrayList;
 
 import app.ara.ui.ResourceArrayAdapter;
 import app.ara.utils.FontChangeCrawler;
-import app.ara.utils.app.brest.game.Game;
-import app.ara.utils.app.brest.game.Resource;
+import app.ara.utils.error.ErrorHandler;
+import app.ara.utils.game.Game;
+import app.ara.utils.game.Resource;
 
 /**
  * An example full-screen activity that shows and hides the system UI (i.e.
@@ -81,11 +82,16 @@ public class ResourceListActivity extends Activity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_resource_list);
-        mGame = (Game)getIntent().getSerializableExtra("game");
-
-        mList = (ListView) findViewById(R.id.list_layout);
-        fill();
-        FontChangeCrawler.setFont(this);
+        try {
+            mGame = (Game) getIntent().getSerializableExtra("game");
+
+            mList = (ListView) findViewById(R.id.list_layout);
+            fill();
+            FontChangeCrawler.setFont(this);
+        }catch (Exception e) {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
+        }
     }
 
 

+ 14 - 0
app/src/main/java/app/ara/activities/SEMenuActivity.java

@@ -1,10 +1,14 @@
 package app.ara.activities;
 
+import android.content.Intent;
 import android.content.res.Resources;
 import android.util.TypedValue;
 import android.view.Gravity;
 import android.view.View;
 import android.widget.TextView;
+import android.widget.Toast;
+
+import app.ara.utils.AndroidResources;
 
 /**
  * Created by ptitcois on 26/06/17.
@@ -86,5 +90,15 @@ public class SEMenuActivity extends MenuActivity {
         if(!mGame.hasResource("start"))
             mGame.pickResource("start");
 
+        if(m_isFirstLaunch)
+        {
+            Toast.makeText(this,"Appuyez sur retour pour passer", Toast.LENGTH_LONG).show();
+
+            Intent i = AndroidResources.getViewerIntent(this,mGame.findResource("start"));
+            Intent j = AndroidResources.getViewerIntent(this,mGame.findResource("intro"));
+            startActivity(i);
+            startActivity(j);
+            mGame.save(this);
+        }
     }
 }

+ 53 - 42
app/src/main/java/app/ara/activities/SettingsActivity.java

@@ -17,7 +17,8 @@ import app.ara.ui.SelectButton;
 import app.ara.ui.OnToggleListener;
 import app.ara.utils.FontChangeCrawler;
 import app.ara.utils.Settings;
-import app.ara.utils.app.brest.game.Game;
+import app.ara.utils.error.ErrorHandler;
+import app.ara.utils.game.Game;
 
 /**
  * A {@link PreferenceActivity} that presents a set of application settings. On
@@ -51,33 +52,37 @@ public class SettingsActivity extends Activity implements OnToggleListener, View
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_settings);
-
-        mGame = Game.game();
-        mRootDev=new LinearLayout(this);
-        mRootDev.setOrientation(LinearLayout.VERTICAL);
-        mAccelerometer = new CustomToggleButton(this);
-        mGPS = new CustomToggleButton(this);
-        mDev = new CustomToggleButton(this);
-        mDev.setOnClickListener((OnToggleListener)this);
-        mPlaces=new CustomToggleButton(this);
-        mRA=new CustomToggleButton(this);
-        mAreas=new CustomToggleButton(this);
-        mSensorLatency = new SelectButton(this, Settings.SENSORS_LATENCIES);
-        mCheat = newButton("Avoir toutes les ressources");
-        mReset = newButton("Supprimer la sauvegarde");
-        mRoot = (LinearLayout)findViewById(R.id.root_layout);
-        mOk = (Button)findViewById(R.id.sbutok);
-        addSelection("Latence des capteurs:", mSensorLatency, mRoot);
-        addAction("", mReset, mRoot);
-        addOptionBool("Mode Réalitée augmentée", mRA, mRoot);
-        addOptionBool("Mode développeur:", mDev, mRoot);
-        mRoot.addView(mRootDev);
-        addOptionBool("GPS préprogrammé:", mGPS, mRootDev);
-        addOptionBool("Afficher les zones:", mAreas, mRootDev);
-        addOptionBool("Afficher les ressources:", mPlaces, mRootDev);
-        addAction("", mCheat, mRootDev);
-        preset();
-        FontChangeCrawler.setFont(this);
+        try {
+            mGame = Game.game();
+            mRootDev = new LinearLayout(this);
+            mRootDev.setOrientation(LinearLayout.VERTICAL);
+            mAccelerometer = new CustomToggleButton(this);
+            mGPS = new CustomToggleButton(this);
+            mDev = new CustomToggleButton(this);
+            mDev.setOnClickListener((OnToggleListener) this);
+            mPlaces = new CustomToggleButton(this);
+            mRA = new CustomToggleButton(this);
+            mAreas = new CustomToggleButton(this);
+            mSensorLatency = new SelectButton(this, Settings.SENSORS_LATENCIES);
+            mCheat = newButton("Avoir toutes les ressources");
+            mReset = newButton("Supprimer la sauvegarde");
+            mRoot = (LinearLayout) findViewById(R.id.root_layout);
+            mOk = (Button) findViewById(R.id.sbutok);
+            addSelection("Latence des capteurs:", mSensorLatency, mRoot);
+            addAction("", mReset, mRoot);
+            addOptionBool("Mode Réalitée augmentée", mRA, mRoot);
+            addOptionBool("Mode développeur:", mDev, mRoot);
+            mRoot.addView(mRootDev);
+            addOptionBool("GPS préprogrammé:", mGPS, mRootDev);
+            addOptionBool("Afficher les zones:", mAreas, mRootDev);
+            addOptionBool("Afficher les ressources:", mPlaces, mRootDev);
+            addAction("", mCheat, mRootDev);
+            preset();
+            FontChangeCrawler.setFont(this);
+        }catch (Exception e) {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
+        }
     }
 
     protected View newButton(String text)
@@ -120,18 +125,19 @@ public class SettingsActivity extends Activity implements OnToggleListener, View
 
     public void onClick(View v)
     {
-        if(v==mOk)
-        {
-            setResults();
-            finish();
-        }
-        else if(v==mReset)
-        {
-            reset();
-            setResults();
-        }else if(v==mCheat)
-        {
-            mGame.pickAllResoucres();
+        try {
+            if (v == mOk) {
+                setResults();
+                finish();
+            } else if (v == mReset) {
+                reset();
+                setResults();
+            } else if (v == mCheat) {
+                mGame.pickAllResoucres();
+            }
+        }catch (Exception e) {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
         }
     }
 
@@ -218,8 +224,13 @@ public class SettingsActivity extends Activity implements OnToggleListener, View
 
     private void updateVisibility()
     {
-        int x = mDev.getState()?View.VISIBLE:View.GONE;
-        mRootDev.setVisibility(x);
+        try {
+            int x = mDev.getState() ? View.VISIBLE : View.GONE;
+            mRootDev.setVisibility(x);
+        }catch (Exception e) {
+            e.printStackTrace();
+            ErrorHandler.addError(this, e);
+        }
     }
 
     private void preset()

+ 1 - 1
app/src/main/java/app/ara/activities/TransferActivity.java

@@ -11,7 +11,7 @@ import android.widget.ProgressBar;
 import android.widget.Toast;
 
 import app.ara.utils.FontChangeCrawler;
-import app.ara.utils.app.brest.game.Game;
+import app.ara.utils.game.Game;
 
 public class TransferActivity extends Activity {
 

+ 1 - 2
app/src/main/java/app/ara/ui/CameraPreview.java

@@ -20,7 +20,6 @@ public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback
     public CameraPreview(Context context, Camera camera) {
         super(context);
         this.mCamera = camera;
-        Log.e("______", camera+" camera");
         this.mHolder = getHolder();
         this.mHolder.addCallback(this);
     }
@@ -78,7 +77,7 @@ public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback
             mCamera.startPreview();
 
         } catch (Exception e) {
-            Log.d("TAG", "Error starting camera preview: " + e.getMessage());
+            e.printStackTrace();
         }
 
     }

+ 1 - 5
app/src/main/java/app/ara/ui/ResourceArrayAdapter.java

@@ -16,7 +16,7 @@ import java.util.List;
 import app.ara.activities.R;
 import app.ara.utils.AndroidResources;
 import app.ara.utils.FontChangeCrawler;
-import app.ara.utils.app.brest.game.Resource;
+import app.ara.utils.game.Resource;
 
 /**
  * Created by ptitcois on 22/08/16.
@@ -78,23 +78,19 @@ public class ResourceArrayAdapter extends ArrayAdapter<Object> implements  Adapt
 
     @Override
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
-        Log.e("__________", "OK");
         if (adapterView.getItemAtPosition(i) instanceof Resource) {
             Resource item = (Resource) adapterView.getItemAtPosition(i);
-            Log.e("__________", "ItemClick: "+i+" "+l+ " Ressource");
 
             Intent intent =AndroidResources.getViewerIntent(mContext, item);
             mContext.startActivity(intent);
 
         }else if(adapterView.getItemAtPosition(i) instanceof String)
         {
-            Log.e("__________", "ItemClick: "+i+" "+l+ " String");
 
         }
         else
         {
 
-            Log.e("__________", "ItemClick: "+i+" "+l+ " Autre");
         }
     }
 }

+ 2 - 2
app/src/main/java/app/ara/utils/AndroidResources.java

@@ -10,8 +10,8 @@ import app.ara.activities.ImageViewerActivity;
 import app.ara.activities.InfoActivity;
 import app.ara.activities.MediaViewerAcitvity;
 import app.ara.activities.ModelViewerActivity;
-import app.ara.utils.app.brest.game.Game;
-import app.ara.utils.app.brest.game.Resource;
+import app.ara.utils.game.Game;
+import app.ara.utils.game.Resource;
 import min3d.core.Object3d;
 import min3d.parser.IParser;
 import min3d.parser.Parser;

+ 2 - 2
app/src/main/java/app/ara/utils/GpsStub.java

@@ -48,14 +48,14 @@ public class GpsStub {
             if (res.length > 1) lat = (double) Double.parseDouble(res[1]);
         }catch (Exception e)
         {
-            Log.e("GPSStub", "Stub reading error (first) on '"+str+"'");
+            Log.e("app.ara: GPS", "Stub reading error (first) on '"+str+"'");
         }
 
         try {
             if (res.length > 2) acc = (double) Double.parseDouble(res[2]);
         }catch (Exception e)
         {
-            Log.e("GPSStub", "Stub reading error (second) on '"+str+"'");
+            Log.e("app.ara: GPS", "Stub reading error (second) on '"+str+"'");
         }
 
         add(new GPSPoint(lon, lat,(float) acc));

+ 1 - 1
app/src/main/java/app/ara/utils/ResourceManager.java

@@ -3,7 +3,7 @@ package app.ara.utils;
 import java.io.Serializable;
 import java.util.ArrayList;
 
-import app.ara.utils.app.brest.game.Resource;
+import app.ara.utils.game.Resource;
 
 /**
  * Created by ptitcois on 18/08/16.

+ 104 - 0
app/src/main/java/app/ara/utils/error/ErrorHandler.java

@@ -0,0 +1,104 @@
+package app.ara.utils.error;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Build;
+import android.os.Looper;
+import android.support.v7.app.AlertDialog;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+
+/**
+ * Created by ptitcois on 24/07/17.
+ */
+public class ErrorHandler {
+    private static Object s_lock = new Object();
+    public static ArrayList<String> s_errors = new ArrayList<String>();
+
+
+
+    public static void addError(Activity context, Exception _e)
+    {
+        boolean add=true;
+        String s = "Une erreur s'est produite:\n"+_e.getMessage()+"\n"+exceptionToString(_e);
+        for(int i=0; i<s_errors.size(); i++)
+            if(s.compareTo(s_errors.get(i))==0)
+                add=false;
+        if(add)
+        {
+            s_errors.add(s);
+            context.finish();
+        }
+    }
+
+    public static void handle(Activity context)
+    {
+        final Context c=context;
+        while(s_errors.size()>0)
+        {
+            context.runOnUiThread(new Runnable() {
+                public void run() {
+                    AlertDialog.Builder builder;
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                        builder = new AlertDialog.Builder(c, android.R.style.Theme_Material_Dialog_Alert);
+                    } else {
+                        builder = new AlertDialog.Builder(c);
+                    }
+
+
+                    builder.setTitle("Erreur")
+                            .setMessage(s_errors.get(0))
+                            .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
+                                public void onClick(DialogInterface dialog, int which) {
+                                }
+                            })
+                            .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
+                                public void onClick(DialogInterface dialog, int which) {
+                                }
+                            })
+                            .setIcon(android.R.drawable.ic_dialog_alert)
+                            .show();
+                }
+            });
+            s_errors.remove(0);
+        }
+    }
+
+
+    public static void waitThread(Thread t)
+    {
+        synchronized (s_lock)
+        {
+            try {
+                t.join();
+            } catch (InterruptedException e1) {
+                e1.printStackTrace();
+            }
+        }
+    }
+
+    public static void wakeThreadUp(Thread t)
+    {
+        synchronized (s_lock)
+        {
+            t.notify();
+        }
+    }
+
+    public static void crash()
+    {
+        String n = null;
+        n.getBytes();
+    }
+
+    private static String exceptionToString(Exception e)
+    {
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        e.printStackTrace(pw);
+        return sw.toString();
+    }
+}

+ 7 - 5
app/src/main/java/app/ara/utils/files/FileManager.java

@@ -36,7 +36,6 @@ public class FileManager {
         try {
             is = a.getAssets().open(path);
         } catch (IOException e) {
-            e.printStackTrace();
         }
         return is;
     }
@@ -64,9 +63,12 @@ public class FileManager {
         for(int i=0; i<IMG_EXT.length; i++)
         {
             InputStream is = openFile(a, path+IMG_EXT[i]);
-            if(is!=null)
+            if(is!=null) {
+                Log.i("app.ara: Open", "Recherche d'image: '"+path+"' OK");
                 return is;
+            }
         }
+        Log.i("app.ara: Open", "Recherche d'image: '"+path+"' FAIL");
         return null;
     }
 
@@ -77,6 +79,7 @@ public class FileManager {
         try {
             is = testIimage(a, path);
             bitmap = BitmapFactory.decodeStream(is);
+
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -93,18 +96,17 @@ public class FileManager {
         for(int i=0; i<MEDIA_EXT.length; i++)
         {
             AssetFileDescriptor is = null;
-            Log.e("________", "Start");
             try {
                 is = a.getAssets().openFd(path+MEDIA_EXT[i]);
 
-                Log.e("________", "Recherche de vidéo: '"+path+MEDIA_EXT[i]+"' OK");
+                Log.i("app.ara: Open", "Recherche de vidéo: '"+path+"' OK");
                 if(is!=null)
                     return is;
             } catch (IOException e) {
                 //e.printStackTrace();
-                Log.e("________", "Recherche de vidéo: '"+path+MEDIA_EXT[i]+"' FAIL");
             }
         }
+        Log.e("app.ara: Open", "Recherche de vidéo: '"+path+"' FAIL");
         return null;
     }
 

+ 0 - 1
app/src/main/java/app/ara/utils/files/JSONAssetsManager.java

@@ -33,7 +33,6 @@ public class JSONAssetsManager {
             } catch (Exception e) {
                 e.printStackTrace();
             }
-            Log.v("Text Data", byteArrayOutputStream.toString());
             try {
                 // Parse the data into jsonobject to get original data in form of json.
                 JSONObject jObject = new JSONObject(byteArrayOutputStream.toString());

+ 1 - 1
app/src/main/java/app/ara/utils/app/brest/game/Area.java → app/src/main/java/app/ara/utils/game/Area.java

@@ -1,4 +1,4 @@
-package app.ara.utils.app.brest.game;
+package app.ara.utils.game;
 
 import android.app.Activity;
 

+ 3 - 9
app/src/main/java/app/ara/utils/app/brest/game/Game.java → app/src/main/java/app/ara/utils/game/Game.java

@@ -1,4 +1,4 @@
-package app.ara.utils.app.brest.game;
+package app.ara.utils.game;
 
 import android.app.Activity;
 import android.content.Context;
@@ -69,7 +69,6 @@ public class Game  implements Serializable {
             for(int i=0; i<stages.length(); i++) {
                 Stage s = new Stage(stages.getJSONObject(i));
                 Resource r = findResource(s.getResourceName());
-                Log.e("_______", "Res = "+r+" "+s.getResourceName());
                 s.setResource(r);
                 mStages.add(s);
             }
@@ -132,7 +131,6 @@ public class Game  implements Serializable {
     public boolean nextStage()
     {
         mCurrentStage++;
-        Log.e("------------", "Is Finished : "+mCurrentStage+" > "+mNStages+" = "+(mCurrentStage>mNStages));
         if(mCurrentStage>mNStages) return true;
 
         loadStageAreasResources();
@@ -281,10 +279,10 @@ public class Game  implements Serializable {
             fos.close();
         } catch (IOException e) {
             e.printStackTrace();
-            Log.e("SAVING", "Save failed:"+e.getMessage());
+            Log.e("app.ara: Game", "Save failed:"+e.getMessage());
             return false;
         }
-        Log.e("SAVING", "Save OK");
+        Log.i("app.ara: Game", "Save OK");
         return true;
     }
 
@@ -578,11 +576,7 @@ public class Game  implements Serializable {
 
     public void printStage()
     {
-        Log.e("---------------", "Stage:"+getCurrentStage());
-        for(int i=0; i<mResources.getResourceLeft().size(); i++) {
-            Log.e("---------------", "   '" + mResources.getResourceLeft().get(i).getName() + "'");
 
-        }
 
     }
 }

+ 1 - 1
app/src/main/java/app/ara/utils/app/brest/game/LocatedResources.java → app/src/main/java/app/ara/utils/game/LocatedResources.java

@@ -1,4 +1,4 @@
-package app.ara.utils.app.brest.game;
+package app.ara.utils.game;
 
 import java.util.ArrayList;
 

+ 4 - 3
app/src/main/java/app/ara/utils/app/brest/game/Place.java → app/src/main/java/app/ara/utils/game/Place.java

@@ -1,4 +1,4 @@
-package app.ara.utils.app.brest.game;
+package app.ara.utils.game;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -70,9 +70,10 @@ public class Place  implements Serializable {
     public boolean isPlayerOn(Player p)
     {
         GPSPoint pp = p.getPosition();
-        if(pp==null) return false;
+        GPSPoint pp2 = p.getSensorsManager().getPosition();
+        if(pp==null || pp2==null) return false;
 
-        return mLocation.getDistanceWith(pp)<=mRadius+p.getSensorsManager().getPosition().getAccuracy();
+        return mLocation.getDistanceWith(pp)<=mRadius+pp2.getAccuracy();
     }
 
     public boolean isOnDirection(Player p)

+ 1 - 1
app/src/main/java/app/ara/utils/app/brest/game/Player.java → app/src/main/java/app/ara/utils/game/Player.java

@@ -1,4 +1,4 @@
-package app.ara.utils.app.brest.game;
+package app.ara.utils.game;
 
 import android.app.Activity;
 

+ 2 - 3
app/src/main/java/app/ara/utils/app/brest/game/Resource.java → app/src/main/java/app/ara/utils/game/Resource.java

@@ -1,4 +1,4 @@
-package app.ara.utils.app.brest.game;
+package app.ara.utils.game;
 
 import android.app.Activity;
 import android.util.Log;
@@ -125,14 +125,13 @@ public class Resource implements Serializable {
     {
         if(m3DModel==null)
         {
-            Log.e("resource.get3Model", "app.brest.testmin3d:raw/"+mName+"_obj");
+            Log.i("app.ara: Ressource", "loading 'app.brest.testmin3d:raw/"+mName+"_obj'");
             IParser myParser = Parser.createParser(context, Parser.Type.OBJ,  mName+"_obj",true);
             myParser.parse();
 
             m3DModel = myParser.getParsedObject();
             m3DModel.position().x = mPosition.x; m3DModel.position().y = mPosition.y; m3DModel.position().z = mPosition.z;
             m3DModel.rotation().x = mRotation.x; m3DModel.rotation().y = mRotation.y; m3DModel.rotation().z = mRotation.z;
-            Log.e("____","Rotation ("+m3DModel.rotation().x+","+m3DModel.rotation().y+","+m3DModel.rotation().z+")");
             m3DModel.rotation().x+=45;
             //m3DModel.rotation().y+=-180;
 

+ 1 - 1
app/src/main/java/app/ara/utils/app/brest/game/Stage.java → app/src/main/java/app/ara/utils/game/Stage.java

@@ -1,4 +1,4 @@
-package app.ara.utils.app.brest.game;
+package app.ara.utils.game;
 
 import org.json.JSONException;
 import org.json.JSONObject;

+ 0 - 3
app/src/main/java/min3d/parser/AParser.java

@@ -228,12 +228,9 @@ public abstract class AParser implements IParser {
 				if(mStream==null) {
 					int bmResourceID = resources.getIdentifier(ba.resourceID, null, null);
 					if (bmResourceID == 0) {
-						Log.d(Min3d.TAG, "Texture not found: " + ba.resourceID);
 						return;
 					}
 
-					Log.d(Min3d.TAG, "Adding texture " + ba.resourceID);
-
 					b = Utils.makeBitmapFromResourceId(bmResourceID);
 				}else
 				{