gautrais 7 年之前
父节点
当前提交
2537c282ae
共有 100 个文件被更改,包括 529 次插入721 次删除
  1. 1 0
      app/app.iml
  2. 1 1
      app/build.gradle
  3. 1 5
      app/src/main/AndroidManifest.xml
  4. 二进制
      app/src/main/assets/appel.png
  5. 14 2
      app/src/main/assets/game_medium
  6. 二进制
      app/src/main/assets/tuto/0.png
  7. 二进制
      app/src/main/assets/tuto/1.png
  8. 二进制
      app/src/main/assets/tuto/2.png
  9. 二进制
      app/src/main/assets/tuto/3.png
  10. 二进制
      app/src/main/assets/tuto/4.png
  11. 二进制
      app/src/main/assets/tuto/5.png
  12. 二进制
      app/src/main/assets/tuto/6.png
  13. 二进制
      app/src/main/assets/tuto/7.png
  14. 二进制
      app/src/main/assets/tuto/8.png
  15. 0 240
      app/src/main/java/app/mar/activities/viewers/TestVideoActivity.java
  16. 4 4
      app/src/main/java/macampcorp/macamp/activities/BombActivity.java
  17. 5 5
      app/src/main/java/macampcorp/macamp/activities/ChallengeDriver.java
  18. 3 3
      app/src/main/java/macampcorp/macamp/activities/CreditsActivity.java
  19. 3 8
      app/src/main/java/macampcorp/macamp/activities/ErrorActivity.java
  20. 25 27
      app/src/main/java/macampcorp/macamp/activities/HostActivity.java
  21. 3 7
      app/src/main/java/macampcorp/macamp/activities/LoadingActivity.java
  22. 4 6
      app/src/main/java/macampcorp/macamp/activities/PermissionActivity.java
  23. 2 2
      app/src/main/java/macampcorp/macamp/activities/TutoActivity.java
  24. 106 0
      app/src/main/java/macampcorp/macamp/activities/fragments/BombFragment.java
  25. 10 12
      app/src/main/java/macampcorp/macamp/activities/fragments/ChallengeFragment.java
  26. 5 5
      app/src/main/java/macampcorp/macamp/activities/fragments/QCMFragment.java
  27. 7 7
      app/src/main/java/macampcorp/macamp/activities/fragments/QRCodeFragment.java
  28. 4 4
      app/src/main/java/macampcorp/macamp/activities/fragments/QuestionFragment.java
  29. 5 5
      app/src/main/java/macampcorp/macamp/activities/viewers/ImageViewerActivity.java
  30. 14 9
      app/src/main/java/macampcorp/macamp/activities/viewers/MediaViewerAcitvity.java
  31. 7 8
      app/src/main/java/macampcorp/macamp/activities/viewers/ResourceListActivity.java
  32. 1 1
      app/src/main/java/macampcorp/macamp/exceptions/BadChallengeConfigException.java
  33. 1 1
      app/src/main/java/macampcorp/macamp/exceptions/BadConfigFileException.java
  34. 1 1
      app/src/main/java/macampcorp/macamp/exceptions/BadGameConfigException.java
  35. 1 1
      app/src/main/java/macampcorp/macamp/exceptions/BadResourceConfigException.java
  36. 2 2
      app/src/main/java/macampcorp/macamp/exceptions/BadResourceTypeException.java
  37. 1 1
      app/src/main/java/macampcorp/macamp/exceptions/BadStageConfigException.java
  38. 2 2
      app/src/main/java/macampcorp/macamp/exceptions/ResourceFileNotFoundException.java
  39. 1 1
      app/src/main/java/macampcorp/macamp/exceptions/ResourceNotFoundException.java
  40. 4 3
      app/src/main/java/macampcorp/macamp/game/Bomb.java
  41. 13 9
      app/src/main/java/macampcorp/macamp/game/Event.java
  42. 21 57
      app/src/main/java/macampcorp/macamp/game/Game.java
  43. 2 2
      app/src/main/java/macampcorp/macamp/game/Indice.java
  44. 1 1
      app/src/main/java/macampcorp/macamp/game/Inventaire.java
  45. 1 1
      app/src/main/java/macampcorp/macamp/game/QRCodeReturn.java
  46. 26 19
      app/src/main/java/macampcorp/macamp/game/Resource.java
  47. 1 1
      app/src/main/java/macampcorp/macamp/game/ResourceManager.java
  48. 3 3
      app/src/main/java/macampcorp/macamp/game/Stage.java
  49. 37 0
      app/src/main/java/macampcorp/macamp/game/challenges/BombDefuse.java
  50. 12 9
      app/src/main/java/macampcorp/macamp/game/challenges/Challenge.java
  51. 1 1
      app/src/main/java/macampcorp/macamp/game/challenges/ChallengeReturn.java
  52. 4 4
      app/src/main/java/macampcorp/macamp/game/challenges/QCM.java
  53. 4 4
      app/src/main/java/macampcorp/macamp/game/challenges/QRCodeTreasure.java
  54. 5 5
      app/src/main/java/macampcorp/macamp/game/challenges/Question.java
  55. 4 4
      app/src/main/java/macampcorp/macamp/game/scheduler/ChallengeTask.java
  56. 4 4
      app/src/main/java/macampcorp/macamp/game/scheduler/EventTask.java
  57. 4 4
      app/src/main/java/macampcorp/macamp/game/scheduler/ResourceTask.java
  58. 7 9
      app/src/main/java/macampcorp/macamp/game/scheduler/Scheduler.java
  59. 4 4
      app/src/main/java/macampcorp/macamp/game/scheduler/SpecialTask.java
  60. 3 3
      app/src/main/java/macampcorp/macamp/game/scheduler/Task.java
  61. 1 1
      app/src/main/java/macampcorp/macamp/ui/CustomListView.java
  62. 3 3
      app/src/main/java/macampcorp/macamp/ui/MediaView.java
  63. 3 3
      app/src/main/java/macampcorp/macamp/ui/ResourceArrayAdapter.java
  64. 7 29
      app/src/main/java/macampcorp/macamp/utils/AndroidResources.java
  65. 1 1
      app/src/main/java/macampcorp/macamp/utils/FontChangeCrawler.java
  66. 2 2
      app/src/main/java/macampcorp/macamp/utils/JSONLoader.java
  67. 2 2
      app/src/main/java/macampcorp/macamp/utils/L.java
  68. 1 1
      app/src/main/java/macampcorp/macamp/utils/Levenshtein.java
  69. 4 2
      app/src/main/java/macampcorp/macamp/utils/files/FileManager.java
  70. 1 3
      app/src/main/java/macampcorp/macamp/utils/files/JSONAssetsManager.java
  71. 0 7
      app/src/main/res/drawable-mdpi/uibuttoncircle.xml
  72. 二进制
      app/src/main/res/drawable/ar_green.png
  73. 二进制
      app/src/main/res/drawable/ar_none.png
  74. 二进制
      app/src/main/res/drawable/ar_red.png
  75. 二进制
      app/src/main/res/drawable/ar_skin.png
  76. 二进制
      app/src/main/res/drawable/ar_white.png
  77. 二进制
      app/src/main/res/drawable/arrow_left.png
  78. 二进制
      app/src/main/res/drawable/arrow_right.png
  79. 二进制
      app/src/main/res/drawable/audio.png
  80. 二进制
      app/src/main/res/drawable/background.png
  81. 二进制
      app/src/main/res/drawable/bscanner.png
  82. 二进制
      app/src/main/res/drawable/bscanner_tap.png
  83. 二进制
      app/src/main/res/drawable/button.png
  84. 二进制
      app/src/main/res/drawable/button_tap.png
  85. 二进制
      app/src/main/res/drawable/fleche.png
  86. 二进制
      app/src/main/res/drawable/send.png
  87. 二进制
      app/src/main/res/drawable/title.png
  88. 二进制
      app/src/main/res/drawable/togglebutton_off.png
  89. 二进制
      app/src/main/res/drawable/togglebutton_on.png
  90. 0 7
      app/src/main/res/drawable/uibuttoncircle.xml
  91. 1 1
      app/src/main/res/layout/activity_bomb.xml
  92. 1 1
      app/src/main/res/layout/activity_credits.xml
  93. 1 1
      app/src/main/res/layout/activity_error.xml
  94. 1 1
      app/src/main/res/layout/activity_host.xml
  95. 1 1
      app/src/main/res/layout/activity_loading.xml
  96. 0 54
      app/src/main/res/layout/activity_model_viewer.xml
  97. 1 1
      app/src/main/res/layout/activity_permission.xml
  98. 1 2
      app/src/main/res/layout/activity_resource_list.xml
  99. 0 81
      app/src/main/res/layout/activity_test_video.xml
  100. 102 0
      app/src/main/res/layout/fragment_bomb.xml

+ 1 - 0
app/app.iml

@@ -95,6 +95,7 @@
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-apk" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-main-apk-res" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />

+ 1 - 1
app/build.gradle

@@ -6,7 +6,7 @@ android {
 
 
     defaultConfig {
-        applicationId "app.brest.projetmjc.app"
+        applicationId "macampcorp.macamp.app"
         minSdkVersion 14
         targetSdkVersion 27
         versionCode 1

+ 1 - 5
app/src/main/AndroidManifest.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
-    package="app.mar.activities">
+    package="macampcorp.macamp.activities">
 
     <uses-permission android:name="android.permission.CAMERA" />
 
@@ -47,10 +47,6 @@
             android:name=".HostActivity"
             android:label="@string/title_activity_host"
             android:theme="@style/AppTheme.NoActionBar" />
-        <activity
-            android:name=".viewers.TestVideoActivity"
-            android:label="@string/title_activity_test_video"
-            android:theme="@style/AppTheme.NoActionBar" />
         <activity
             android:name=".BombActivity"
             android:label="@string/title_activity_bomb"

二进制
app/src/main/assets/appel.png


+ 14 - 2
app/src/main/assets/game_medium

@@ -5,7 +5,7 @@
 	"name" : "Intro",
 	"challenges" : [],
 	"resources" : ["intro"],
-	"event_end" : { "method" : "armBomb" }
+	"event_end" : [{ "method" : "tuto" }, { "method" : "armBomb" }]
 },
 {
 	"name" : "Bibliotheuqe_intro",
@@ -405,7 +405,19 @@
 		],
 	"resources" : [],
 	"charIndex" : 6
-}	],
+},
+
+{
+    "name": "bombStage",
+    "challenges" : [
+        {
+            "type" : "BombDefuse",
+            "text" : "Salut ca va ?",
+            "resource" : "bib",
+            "name" : "bombe"
+        }
+    ]
+}],
 	"credits" : 
 	{
 		"text" : "Par Fran\u00e7ois Gautrais !",

二进制
app/src/main/assets/tuto/0.png


二进制
app/src/main/assets/tuto/1.png


二进制
app/src/main/assets/tuto/2.png


二进制
app/src/main/assets/tuto/3.png


二进制
app/src/main/assets/tuto/4.png


二进制
app/src/main/assets/tuto/5.png


二进制
app/src/main/assets/tuto/6.png


二进制
app/src/main/assets/tuto/7.png


二进制
app/src/main/assets/tuto/8.png


+ 0 - 240
app/src/main/java/app/mar/activities/viewers/TestVideoActivity.java

@@ -1,240 +0,0 @@
-package app.mar.activities.viewers;
-
-import android.media.MediaPlayer;
-import android.os.Bundle;
-import android.os.Handler;
-import android.support.v7.app.AppCompatActivity;
-import android.view.View;
-import android.widget.Button;
-import android.widget.FrameLayout;
-import android.widget.ImageButton;
-import android.widget.ImageView;
-import android.widget.SeekBar;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import app.mar.activities.R;
-import app.mar.exceptions.BadResourceTypeException;
-import app.mar.exceptions.ResourceFileNotFoundException;
-import app.mar.game.Resource;
-import app.mar.ui.MediaView;
-
-
-public class TestVideoActivity extends AppCompatActivity implements MediaPlayer.OnSeekCompleteListener,
-        MediaView.OnStartListener,
-        SeekBar.OnSeekBarChangeListener {
-    public static final int REQUEST_CODE = 28;
-    private Resource mResource;
-    private Button mInfo;
-    private TextView mTitle;
-
-    private FrameLayout mFrameLayout;
-    private ImageButton  mButton;
-    private MediaView mMediaView;
-    private ImageView mImageView;
-    private SeekBar mBar;
-    private Handler mHandler = new Handler();
-    private TestVideoActivity.AutoSeek mAutoSeek;
-    private int mCurrentTime;
-    private int mEndTime;
-    private boolean mUserSeeks=false;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_test_video);
-
-        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 TestVideoActivity.AutoSeek(mHandler);
-
-        mMediaView = new MediaView(this);
-        mMediaView.setOnStartListener(this);
-        mImageView = new ImageView(this);
-        mImageView.setImageResource(R.drawable.audio);
-
-        mFrameLayout.addView(mMediaView);
-
-        if(getIntent().hasExtra("resource"))
-        {
-            Toast.makeText(this, "OK", Toast.LENGTH_LONG).show();
-            mResource = (Resource) getIntent().getSerializableExtra("resource");
-            if(mResource==null)
-            {
-                throw  new RuntimeException("Ressource non valide");
-            }
-
-            mTitle.setText(mResource.getTitle());
-
-            String path=mResource.getName();
-            if(mResource.isAudio())
-            {
-                mImageView.setVisibility(View.VISIBLE);
-            }
-            else if(mResource.isVideo())
-            {
-                mImageView.setVisibility(View.GONE);
-            }
-            else
-            {
-                throw new BadResourceTypeException(mResource, Resource.AUDIO+" ou "+Resource.VIDEO);
-            }
-
-            boolean b = mMediaView.play(path);
-            if(!b) throw new ResourceFileNotFoundException(mResource);
-
-        }else {
-            throw  new RuntimeException("La ressource n'a pas été passé sous la clé 'resource'");
-        }
-            Toast.makeText(this, "FAIL", Toast.LENGTH_LONG).show();
-
-
-    }
-
-    public void onFullscreen(View v)
-    {
-        if(mTitle.getVisibility()==View.VISIBLE)
-        {
-            mTitle.setVisibility(View.GONE);
-            mInfo.setVisibility(View.GONE);
-        }else
-        {
-            mTitle.setVisibility(View.VISIBLE);
-            mInfo.setVisibility(View.VISIBLE);
-        }
-    }
-
-    public void onPlayPause(View v)
-    {
-        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();
-        }
-    }
-
-    public void onInfos(View v)
-    {
-
-    }
-
-    @Override
-    public void onSeekComplete(MediaPlayer mediaPlayer) {
-        mAutoSeek.start();
-        mButton.setImageResource(android.R.drawable.ic_media_pause);
-    }
-
-
-
-    public void onUpdateSeek()
-    {
-        if(mMediaView.isPlaying())
-        {
-            mCurrentTime=mMediaView.getTime()/1000;
-            mBar.setProgress(mCurrentTime);
-        }
-    }
-
-    @Override
-    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
-        mUserSeeks=b;
-    }
-
-    @Override
-    public void onStartTrackingTouch(SeekBar seekBar) {
-
-    }
-
-
-    @Override
-    public void onStopTrackingTouch(SeekBar seekBar) {
-        if(mUserSeeks)
-        {
-            mCurrentTime=seekBar.getProgress();
-            mMediaView.seek(mCurrentTime*1000);
-            mAutoSeek.stop();
-            mUserSeeks=false;
-        }
-    }
-
-    @Override
-    public void onStart(MediaView mv) {
-        mCurrentTime=mv.getTime()/1000;
-        mEndTime=mv.getDuration()/1000;
-
-        mBar.setMax(mEndTime);
-        mBar.setProgress(mCurrentTime);
-        mMediaView.setOnSeekCompleteListener(this);
-
-        mAutoSeek.start();
-        mButton.setImageResource(android.R.drawable.ic_media_pause);
-    }
-
-    private class AutoSeek implements Runnable
-    {
-        private Handler mHandler;
-        AutoSeek(Handler h)
-        {
-            mHandler=h;
-        }
-
-        @Override
-        public void run() {
-            onUpdateSeek();
-            mHandler.postDelayed(this, 500);
-        }
-
-        public void start()
-        {
-            mHandler.postDelayed(this, 500);
-        }
-
-
-        public void stop()
-        {
-            mHandler.removeCallbacks(this);
-        }
-    }
-
-    protected void onResume()
-    {
-        super.onResume();
-    }
-
-    protected  void onPause()
-    {
-        mMediaView.stop();
-        mAutoSeek.stop();
-        super.onPause();
-
-    }
-
-    public void finish()
-    {
-
-        mMediaView.stop();
-        mAutoSeek.stop();
-        mMediaView.clearPlayer();
-        super.finish();
-    }
-
-    public void onDestroy()
-    {
-        mMediaView.stop();
-        mAutoSeek.stop();
-        mMediaView.clearPlayer();
-        super.onDestroy();
-    }
-
-}

+ 4 - 4
app/src/main/java/app/mar/activities/BombActivity.java → app/src/main/java/macampcorp/macamp/activities/BombActivity.java

@@ -1,4 +1,4 @@
-package app.mar.activities;
+package macampcorp.macamp.activities;
 
 import android.content.Intent;
 import android.graphics.Typeface;
@@ -14,9 +14,9 @@ import android.widget.Toast;
 import java.util.Timer;
 import java.util.TimerTask;
 
-import app.mar.game.Bomb;
-import app.mar.game.Game;
-import app.mar.game.scheduler.SpecialTask;
+import macampcorp.macamp.game.Bomb;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.game.scheduler.SpecialTask;
 
 public class BombActivity extends AppCompatActivity {
 

+ 5 - 5
app/src/main/java/app/mar/activities/ChallengeDriver.java → app/src/main/java/macampcorp/macamp/activities/ChallengeDriver.java

@@ -1,12 +1,12 @@
-package app.mar.activities;
+package macampcorp.macamp.activities;
 
 import android.app.Activity;
 import android.net.Uri;
 
-import app.mar.activities.fragments.ChallengeFragment;
-import app.mar.game.Game;
-import app.mar.game.Resource;
-import app.mar.game.challenges.Challenge;
+import macampcorp.macamp.activities.fragments.ChallengeFragment;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.game.Resource;
+import macampcorp.macamp.game.challenges.Challenge;
 
 public interface ChallengeDriver extends ChallengeFragment.OnFragmentInteractionListener {
     public void challengeValidate(Challenge c, Game g, ChallengeDriver cd);

+ 3 - 3
app/src/main/java/app/mar/activities/CreditsActivity.java → app/src/main/java/macampcorp/macamp/activities/CreditsActivity.java

@@ -1,12 +1,12 @@
-package app.mar.activities;
+package macampcorp.macamp.activities;
 
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.text.Html;
 import android.widget.TextView;
 
-import app.mar.game.Game;
-import app.mar.utils.FontChangeCrawler;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.utils.FontChangeCrawler;
 
 public class CreditsActivity extends AppCompatActivity {
 

+ 3 - 8
app/src/main/java/app/mar/activities/ErrorActivity.java → app/src/main/java/macampcorp/macamp/activities/ErrorActivity.java

@@ -1,4 +1,4 @@
-package app.mar.activities;
+package macampcorp.macamp.activities;
 
 import android.app.Activity;
 import android.content.Context;
@@ -9,8 +9,8 @@ import android.view.View;
 import android.widget.EditText;
 import android.widget.TextView;
 
-import app.mar.game.Game;
-import app.mar.game.scheduler.Scheduler;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.game.scheduler.Scheduler;
 
 public class ErrorActivity extends AppCompatActivity {
 
@@ -53,11 +53,6 @@ public class ErrorActivity extends AppCompatActivity {
         ctx.startActivityForResult(intent, REQUEST_CODE);
     }
 
-    public static void dumpLog(Activity ctx)
-    {
-        String x =  Game.dumpLog();
-        error(ctx,x);
-    }
 
     @Override
     public void onBackPressed() {

+ 25 - 27
app/src/main/java/app/mar/activities/HostActivity.java → app/src/main/java/macampcorp/macamp/activities/HostActivity.java

@@ -1,4 +1,4 @@
-package app.mar.activities;
+package macampcorp.macamp.activities;
 
 import android.app.Activity;
 import android.app.FragmentManager;
@@ -16,22 +16,22 @@ import android.widget.TextView;
 import java.util.Timer;
 import java.util.TimerTask;
 
-import app.mar.activities.fragments.ChallengeFragment;
-import app.mar.activities.fragments.QCMFragment;
-import app.mar.activities.fragments.QRCodeFragment;
-import app.mar.activities.fragments.QuestionFragment;
-import app.mar.activities.viewers.ImageViewerActivity;
-import app.mar.activities.viewers.MediaViewerAcitvity;
-import app.mar.activities.viewers.ResourceListActivity;
-import app.mar.activities.viewers.TestVideoActivity;
-import app.mar.game.Game;
-import app.mar.game.Resource;
-import app.mar.game.Stage;
-import app.mar.game.challenges.Challenge;
-import app.mar.game.Indice;
-import app.mar.game.scheduler.Scheduler;
-import app.mar.game.scheduler.SpecialTask;
-import app.mar.utils.AndroidResources;
+import macampcorp.macamp.activities.fragments.BombFragment;
+import macampcorp.macamp.activities.fragments.ChallengeFragment;
+import macampcorp.macamp.activities.fragments.QCMFragment;
+import macampcorp.macamp.activities.fragments.QRCodeFragment;
+import macampcorp.macamp.activities.fragments.QuestionFragment;
+import macampcorp.macamp.activities.viewers.ImageViewerActivity;
+import macampcorp.macamp.activities.viewers.MediaViewerAcitvity;
+import macampcorp.macamp.activities.viewers.ResourceListActivity;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.game.Resource;
+import macampcorp.macamp.game.Stage;
+import macampcorp.macamp.game.challenges.Challenge;
+import macampcorp.macamp.game.Indice;
+import macampcorp.macamp.game.scheduler.Scheduler;
+import macampcorp.macamp.game.scheduler.SpecialTask;
+import macampcorp.macamp.utils.AndroidResources;
 
 
 public class HostActivity extends Activity implements ChallengeDriver{
@@ -46,6 +46,7 @@ public class HostActivity extends Activity implements ChallengeDriver{
     protected QCMFragment mQCMFragment;
     protected QRCodeFragment mQRCodeFragment;
     protected QuestionFragment mQuestionFragment;
+    protected BombFragment mBombFragment;
     protected ChallengeFragment mCurrentFragment;
     protected Challenge mCurrentChallenge;
 
@@ -74,11 +75,11 @@ public class HostActivity extends Activity implements ChallengeDriver{
         mQCMFragment = QCMFragment.newInstance();
         mQuestionFragment = QuestionFragment.newInstance();
         mQRCodeFragment = QRCodeFragment.newInstance();
+        mBombFragment = BombFragment.newInstance();
         mUIButtonVideos = (Button) findViewById(R.id.btn_videos);
         mUIButtonIndice = (Button) findViewById(R.id.btn_indice);
         mUIButtonValid = (Button) findViewById(R.id.btn_valid);
 
-        Log.e("-----", "Game.game()");
         mGame=Game.game();
 
         mUITimeLeft = findViewById(R.id.tv_car);
@@ -107,10 +108,7 @@ public class HostActivity extends Activity implements ChallengeDriver{
 
     public void initFromLoad()
     {
-
-        Log.e("____SAVE____", "Load 0: Last"+mGame.getScheduler().getLastTask()+" --> "+mGame.getScheduler());
         mGame.getScheduler().undo();
-        Log.e("____SAVE____", "Load 1: Last"+mGame.getScheduler().getLastTask()+" --> "+mGame.getScheduler());
         mGame.getScheduler().schedule(this, mGame);
     }
 
@@ -126,6 +124,8 @@ public class HostActivity extends Activity implements ChallengeDriver{
             f= mQRCodeFragment;
         else if(type.isInstance(mQuestionFragment))
             f= mQuestionFragment;
+        else if(type.isInstance(mBombFragment))
+            f=mBombFragment;
         else {
             throw new RuntimeException("Erreur: La classe de fragment est null");
         }
@@ -266,7 +266,7 @@ public class HostActivity extends Activity implements ChallengeDriver{
     }
 
     public Challenge nextChallenge() {
-
+        Stage oldStage = mGame.getCurrentStage();
         Challenge c = mGame.nextChallenge(this);
         Stage s = mGame.getCurrentStage();
 //        Log.e("___SCHEDULER_PRESQUE","\t->"+ c +" stage : "+s.getName());
@@ -275,7 +275,7 @@ public class HostActivity extends Activity implements ChallengeDriver{
             mGame.getScheduler().append(c);
         }else if(s!=null) //new stage
         {
-            mGame.getBomb().addKnownCharacter(s.getCharIndex());
+            mGame.getBomb().addKnownCharacter(oldStage.getCharIndex());
             updateCode();
         }else{
             Scheduler sched = mGame.getScheduler();
@@ -296,7 +296,6 @@ public class HostActivity extends Activity implements ChallengeDriver{
         {
             case CreditsActivity.REQUEST_CODE:
             case MediaViewerAcitvity.REQUEST_CODE:
-            case TestVideoActivity.REQUEST_CODE:
             case BombActivity.REQUEST_CODE:
             case ImageViewerActivity.REQUEST_CODE:
                 mGame.getScheduler().schedule(this, mGame);
@@ -314,7 +313,8 @@ public class HostActivity extends Activity implements ChallengeDriver{
     }
 
     public void _challengeValidate(Challenge c, Game g, ChallengeDriver dri, boolean ok) {
-        if(ok) mGame.getBomb().addKnownCharacter(c.getCharIndex());
+        if(ok)
+            mGame.getBomb().addKnownCharacter(c.getCharIndex());
         updateCode();
         nextChallenge();
 
@@ -356,14 +356,12 @@ public class HostActivity extends Activity implements ChallengeDriver{
 
     @Override
     public void load() {
-        Log.e("____SAVE____", "Load: Last"+mGame.getScheduler().getLastTask()+" --> "+mGame.getScheduler());
         mGame = Game.load(this);
         Game.setGame(mGame);
     }
 
     @Override
     public void save() {
-        Log.e("____SAVE____", "Save: Last"+mGame.getScheduler().getLastTask()+" --> "+mGame.getScheduler());
         mGame.save(this);
     }
 

+ 3 - 7
app/src/main/java/app/mar/activities/LoadingActivity.java → app/src/main/java/macampcorp/macamp/activities/LoadingActivity.java

@@ -1,4 +1,4 @@
-package app.mar.activities;
+package macampcorp.macamp.activities;
 
 import android.content.Intent;
 import android.support.v7.app.AppCompatActivity;
@@ -7,7 +7,7 @@ import android.util.Log;
 import android.view.View;
 import android.widget.Toast;
 
-import app.mar.game.Game;
+import macampcorp.macamp.game.Game;
 
 
 
@@ -15,7 +15,6 @@ public class LoadingActivity extends AppCompatActivity {
 
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data){
-        Log.e("----------", "result"+requestCode);
         if(requestCode==HostActivity.REQUEST_CODE)
             finish();
         else
@@ -53,10 +52,7 @@ public class LoadingActivity extends AppCompatActivity {
             }
         }
 
-        if(Game.isFailed())
-            ErrorActivity.dumpLog(this);
-        else
-            startGame();
+        startGame();
 
 
     }

+ 4 - 6
app/src/main/java/app/mar/activities/PermissionActivity.java → app/src/main/java/macampcorp/macamp/activities/PermissionActivity.java

@@ -1,4 +1,4 @@
-package app.mar.activities;
+package macampcorp.macamp.activities;
 
 import android.Manifest;
 import android.app.Activity;
@@ -16,9 +16,9 @@ import android.widget.TextView;
 
 import java.util.ArrayList;
 
-import app.mar.game.Game;
-import app.mar.game.Resource;
-import app.mar.utils.files.FileManager;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.game.Resource;
+import macampcorp.macamp.utils.files.FileManager;
 
 public class PermissionActivity extends AppCompatActivity {
     private int m_nPerm=3;
@@ -89,7 +89,6 @@ public class PermissionActivity extends AppCompatActivity {
                 builder.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
                     public void onClick(DialogInterface dialog, int id) {
                         startGame();
-                        Resource.logNotFound();
                     }
                 });
                 builder.setNegativeButton("Non", new DialogInterface.OnClickListener() {
@@ -97,7 +96,6 @@ public class PermissionActivity extends AppCompatActivity {
                         Game.erase(t);
                         Game.setGame(null);
                         startGame();
-                        Resource.logNotFound();
                     }
                 });
         // Set other dialog properties

+ 2 - 2
app/src/main/java/app/mar/activities/TutoActivity.java → app/src/main/java/macampcorp/macamp/activities/TutoActivity.java

@@ -1,4 +1,4 @@
-package app.mar.activities;
+package macampcorp.macamp.activities;
 
 import android.content.Context;
 import android.content.DialogInterface;
@@ -18,7 +18,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 
-import app.mar.utils.files.FileManager;
+import macampcorp.macamp.utils.files.FileManager;
 
 
 public class TutoActivity extends AppCompatActivity  {

+ 106 - 0
app/src/main/java/macampcorp/macamp/activities/fragments/BombFragment.java

@@ -0,0 +1,106 @@
+package macampcorp.macamp.activities.fragments;
+
+import android.app.Activity;
+import android.content.Context;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.RadioGroup;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import macampcorp.macamp.activities.HostActivity;
+import macampcorp.macamp.activities.R;
+import macampcorp.macamp.game.challenges.BombDefuse;
+import macampcorp.macamp.game.challenges.Challenge;
+import macampcorp.macamp.game.challenges.Question;
+
+
+public class BombFragment extends ChallengeFragment implements View.OnClickListener {
+    // TODO: Rename parameter arguments, choose names that match
+    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+
+    protected ImageView mUIImage;
+    protected Button mUIDefuse;
+    protected TextView  mUIQuestion;
+    protected BombDefuse mBomb;
+
+
+    public BombFragment() {
+    }
+
+
+
+    public void onDefuse(View v)
+    {
+        Activity act = getActivity();
+        if(act instanceof  HostActivity)
+        {
+            HostActivity a = (HostActivity)act;
+            a.onTryDisarm(null);
+            return;
+        }
+        throw  new RuntimeException("Erreur: L'activite n'est pas de type HostActivity");
+
+    }
+
+
+
+    public static BombFragment newInstance() {
+        BombFragment fragment = new BombFragment();
+        Bundle args = new Bundle();
+        fragment.setArguments(args);
+        return fragment;
+    }
+
+    @Override
+    public boolean check() {
+        return false;
+    }
+
+    @Override
+    protected void onResetUi() {
+        getDriver().setVisibilityView(R.id.btn_valid, View.INVISIBLE);
+    }
+
+
+    @Override
+    public void onInitChallenge(Challenge c) {
+        super.onInitChallenge(c);
+
+        if(c instanceof BombDefuse)
+        {
+            mBomb=(BombDefuse) c;
+            mUIQuestion.setText(mBomb.getmText());
+        }
+        else
+        {
+            Toast.makeText(getActivity(), "Error l'entrée n'est pas une question ! ", Toast.LENGTH_LONG).show();
+        }
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+        // Inflate the layout for this fragment
+        View v = super.onCreateView(inflater, container, R.layout.fragment_bomb);
+
+        mUIImage = (ImageView) v.findViewById(R.id.iv_img);
+        mUIQuestion = (TextView) v.findViewById(R.id.tv_question);
+        mUIDefuse = (Button) v.findViewById(R.id.btn_ok);
+        mUIDefuse.setOnClickListener(this);
+        return v;
+    }
+
+
+    @Override
+    public void onClick(View v) {
+        onDefuse(v);
+    }
+}

+ 10 - 12
app/src/main/java/app/mar/activities/fragments/ChallengeFragment.java → app/src/main/java/macampcorp/macamp/activities/fragments/ChallengeFragment.java

@@ -1,4 +1,4 @@
-package app.mar.activities.fragments;
+package macampcorp.macamp.activities.fragments;
 
 import android.app.Activity;
 import android.app.Fragment;
@@ -21,15 +21,15 @@ import android.widget.Toast;
 import java.util.ArrayList;
 import java.util.Timer;
 
-import app.mar.activities.ChallengeDriver;
-import app.mar.activities.R;
-import app.mar.exceptions.ResourceFileNotFoundException;
-import app.mar.exceptions.ResourceNotFoundException;
-import app.mar.game.Resource;
-import app.mar.game.ResourceManager;
-import app.mar.game.challenges.Challenge;
-import app.mar.game.Indice;
-import app.mar.utils.files.FileManager;
+import macampcorp.macamp.activities.ChallengeDriver;
+import macampcorp.macamp.activities.R;
+import macampcorp.macamp.exceptions.ResourceFileNotFoundException;
+import macampcorp.macamp.exceptions.ResourceNotFoundException;
+import macampcorp.macamp.game.Resource;
+import macampcorp.macamp.game.ResourceManager;
+import macampcorp.macamp.game.challenges.Challenge;
+import macampcorp.macamp.game.Indice;
+import macampcorp.macamp.utils.files.FileManager;
 import uk.co.senab.photoview.PhotoViewAttacher;
 
 public abstract class ChallengeFragment extends Fragment {
@@ -46,7 +46,6 @@ public abstract class ChallengeFragment extends Fragment {
 
     protected void onInitChallenge(Challenge c)
     {
-        Log.e("--------","Init challenge '"+c.getName()+"'  -> '"+c.getResourceName()+"'");
         if(c!=null) setImageResource(c.getResourceName());
     }
 
@@ -82,7 +81,6 @@ public abstract class ChallengeFragment extends Fragment {
             Bitmap bmp=null;
             try {
                  bmp = FileManager.openImage(getActivity(), path);
-                 Log.e("------", "File found : "+path);
             } catch (Exception e) {
                 e.printStackTrace();
                 throw new ResourceFileNotFoundException(r);

+ 5 - 5
app/src/main/java/app/mar/activities/fragments/QCMFragment.java → app/src/main/java/macampcorp/macamp/activities/fragments/QCMFragment.java

@@ -1,4 +1,4 @@
-package app.mar.activities.fragments;
+package macampcorp.macamp.activities.fragments;
 
 import android.app.ActionBar;
 import android.os.Bundle;
@@ -14,10 +14,10 @@ import android.widget.Toast;
 
 import java.util.ArrayList;
 
-import app.mar.activities.R;
-import app.mar.game.Game;
-import app.mar.game.challenges.Challenge;
-import app.mar.game.challenges.QCM;
+import macampcorp.macamp.activities.R;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.game.challenges.Challenge;
+import macampcorp.macamp.game.challenges.QCM;
 
 /**
  * A simple {@link Fragment} subclass.

+ 7 - 7
app/src/main/java/app/mar/activities/fragments/QRCodeFragment.java → app/src/main/java/macampcorp/macamp/activities/fragments/QRCodeFragment.java

@@ -1,4 +1,4 @@
-package app.mar.activities.fragments;
+package macampcorp.macamp.activities.fragments;
 
 import android.app.Activity;
 import android.content.pm.PackageManager;
@@ -23,12 +23,12 @@ import com.journeyapps.barcodescanner.DecoratedBarcodeView;
 
 import java.util.List;
 
-import app.mar.activities.ChallengeDriver;
-import app.mar.activities.R;
-import app.mar.game.Game;
-import app.mar.game.challenges.Challenge;
-import app.mar.game.Indice;
-import app.mar.game.challenges.QRCodeTreasure;
+import macampcorp.macamp.activities.ChallengeDriver;
+import macampcorp.macamp.activities.R;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.game.challenges.Challenge;
+import macampcorp.macamp.game.Indice;
+import macampcorp.macamp.game.challenges.QRCodeTreasure;
 
 
 /**

+ 4 - 4
app/src/main/java/app/mar/activities/fragments/QuestionFragment.java → app/src/main/java/macampcorp/macamp/activities/fragments/QuestionFragment.java

@@ -1,4 +1,4 @@
-package app.mar.activities.fragments;
+package macampcorp.macamp.activities.fragments;
 
 import android.os.Bundle;
 import android.app.Fragment;
@@ -11,9 +11,9 @@ import android.widget.ImageView;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import app.mar.activities.R;
-import app.mar.game.challenges.Challenge;
-import app.mar.game.challenges.Question;
+import macampcorp.macamp.activities.R;
+import macampcorp.macamp.game.challenges.Challenge;
+import macampcorp.macamp.game.challenges.Question;
 
 /**
  * A simple {@link Fragment} subclass.

+ 5 - 5
app/src/main/java/app/mar/activities/viewers/ImageViewerActivity.java → app/src/main/java/macampcorp/macamp/activities/viewers/ImageViewerActivity.java

@@ -1,4 +1,4 @@
-package app.mar.activities.viewers;
+package macampcorp.macamp.activities.viewers;
 
 import android.graphics.Bitmap;
 import android.os.Bundle;
@@ -9,10 +9,10 @@ import android.widget.ImageView;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import app.mar.activities.R;
-import app.mar.exceptions.BadResourceTypeException;
-import app.mar.game.Resource;
-import app.mar.utils.files.FileManager;
+import macampcorp.macamp.activities.R;
+import macampcorp.macamp.exceptions.BadResourceTypeException;
+import macampcorp.macamp.game.Resource;
+import macampcorp.macamp.utils.files.FileManager;
 import uk.co.senab.photoview.PhotoViewAttacher;
 
 /**

+ 14 - 9
app/src/main/java/app/mar/activities/viewers/MediaViewerAcitvity.java → app/src/main/java/macampcorp/macamp/activities/viewers/MediaViewerAcitvity.java

@@ -1,4 +1,4 @@
-package app.mar.activities.viewers;
+package macampcorp.macamp.activities.viewers;
 
 import android.app.Activity;
 import android.content.Intent;
@@ -14,12 +14,13 @@ import android.widget.ImageView;
 import android.widget.SeekBar;
 import android.widget.TextView;
 
-import app.mar.activities.R;
-import app.mar.exceptions.BadResourceTypeException;
-import app.mar.exceptions.ResourceFileNotFoundException;
-import app.mar.ui.MediaView;
-import app.mar.utils.FontChangeCrawler;
-import app.mar.game.Resource;
+import macampcorp.macamp.activities.R;
+import macampcorp.macamp.exceptions.BadResourceTypeException;
+import macampcorp.macamp.exceptions.ResourceFileNotFoundException;
+import macampcorp.macamp.ui.MediaView;
+import macampcorp.macamp.utils.FontChangeCrawler;
+import macampcorp.macamp.game.Resource;
+import macampcorp.macamp.utils.files.FileManager;
 
 public class MediaViewerAcitvity extends AppCompatActivity implements MediaPlayer.OnSeekCompleteListener,
                                                                 MediaView.OnStartListener,
@@ -58,10 +59,9 @@ public class MediaViewerAcitvity extends AppCompatActivity implements MediaPlaye
         mMediaView = new MediaView(this);
         mMediaView.setOnStartListener(this);
         mImageView = new ImageView(this);
-        mImageView.setImageResource(R.drawable.audio);
 
         mFrameLayout.addView(mMediaView);
-        //mFrameLayout.addView(mImageView);
+        mFrameLayout.addView(mImageView);
 
 
         if(getIntent().hasExtra("resource"))
@@ -78,6 +78,11 @@ public class MediaViewerAcitvity extends AppCompatActivity implements MediaPlaye
             if(mResource.isAudio())
             {
                 mImageView.setVisibility(View.VISIBLE);
+                String image = mResource.getimage();
+                if(image!=null)
+                {
+                    mImageView.setImageBitmap(FileManager.openImage(this, image));
+                }
             }
             else if (mResource.isVideo())
             {

+ 7 - 8
app/src/main/java/app/mar/activities/viewers/ResourceListActivity.java → app/src/main/java/macampcorp/macamp/activities/viewers/ResourceListActivity.java

@@ -1,17 +1,17 @@
-package app.mar.activities.viewers;
+package macampcorp.macamp.activities.viewers;
 
 import android.app.Activity;
 import android.os.Bundle;
 import android.util.Log;
 import android.widget.ListView;
-
+import macampcorp.macamp.game.Inventaire;
 import java.util.ArrayList;
 
-import app.mar.activities.R;
-import app.mar.game.Game;
-import app.mar.ui.ResourceArrayAdapter;
-import app.mar.utils.*;
-import app.mar.game.*;
+import macampcorp.macamp.activities.R;
+import macampcorp.macamp.game.Resource;
+import macampcorp.macamp.ui.ResourceArrayAdapter;
+import macampcorp.macamp.utils.L;
+
 /**
  * An example full-screen activity that shows and hides the system UI (i.e.
  * status bar and navigation/system bar) with user interaction.
@@ -29,7 +29,6 @@ public class ResourceListActivity extends Activity {
             ArrayList<Object> obs = new ArrayList<Object>();
             for(int i = 0; i< resources.size(); i++) {
                 obs.add(resources.get(i));
-                Log.e("____ACT_DEBUG___", "-> '"+resources.get(i)+"'");
             }
             ResourceArrayAdapter aa;
             aa = new ResourceArrayAdapter(this, android.R.layout.simple_list_item_1, obs);

+ 1 - 1
app/src/main/java/app/mar/exceptions/BadChallengeConfigException.java → app/src/main/java/macampcorp/macamp/exceptions/BadChallengeConfigException.java

@@ -1,4 +1,4 @@
-package app.mar.exceptions;
+package macampcorp.macamp.exceptions;
 
 
 public class BadChallengeConfigException extends BadConfigFileException {

+ 1 - 1
app/src/main/java/app/mar/exceptions/BadConfigFileException.java → app/src/main/java/macampcorp/macamp/exceptions/BadConfigFileException.java

@@ -1,4 +1,4 @@
-package app.mar.exceptions;
+package macampcorp.macamp.exceptions;
 
 public class BadConfigFileException extends RuntimeException {
     public BadConfigFileException(String  r){

+ 1 - 1
app/src/main/java/app/mar/exceptions/BadGameConfigException.java → app/src/main/java/macampcorp/macamp/exceptions/BadGameConfigException.java

@@ -1,4 +1,4 @@
-package app.mar.exceptions;
+package macampcorp.macamp.exceptions;
 
 public class BadGameConfigException extends BadConfigFileException {
     public BadGameConfigException(String  r){

+ 1 - 1
app/src/main/java/app/mar/exceptions/BadResourceConfigException.java → app/src/main/java/macampcorp/macamp/exceptions/BadResourceConfigException.java

@@ -1,4 +1,4 @@
-package app.mar.exceptions;
+package macampcorp.macamp.exceptions;
 
 public class BadResourceConfigException extends BadConfigFileException {
     public BadResourceConfigException(String  r){

+ 2 - 2
app/src/main/java/app/mar/exceptions/BadResourceTypeException.java → app/src/main/java/macampcorp/macamp/exceptions/BadResourceTypeException.java

@@ -1,6 +1,6 @@
-package app.mar.exceptions;
+package macampcorp.macamp.exceptions;
 
-import app.mar.game.Resource;
+import macampcorp.macamp.game.Resource;
 
 public class BadResourceTypeException  extends RuntimeException{
     public BadResourceTypeException(Resource r, String type){

+ 1 - 1
app/src/main/java/app/mar/exceptions/BadStageConfigException.java → app/src/main/java/macampcorp/macamp/exceptions/BadStageConfigException.java

@@ -1,4 +1,4 @@
-package app.mar.exceptions;
+package macampcorp.macamp.exceptions;
 
 public class BadStageConfigException extends BadConfigFileException {
     public BadStageConfigException(String  r){

+ 2 - 2
app/src/main/java/app/mar/exceptions/ResourceFileNotFoundException.java → app/src/main/java/macampcorp/macamp/exceptions/ResourceFileNotFoundException.java

@@ -1,6 +1,6 @@
-package app.mar.exceptions;
+package macampcorp.macamp.exceptions;
 
-import app.mar.game.Resource;
+import macampcorp.macamp.game.Resource;
 
 public class ResourceFileNotFoundException extends RuntimeException {
     public ResourceFileNotFoundException(Resource r) {

+ 1 - 1
app/src/main/java/app/mar/exceptions/ResourceNotFoundException.java → app/src/main/java/macampcorp/macamp/exceptions/ResourceNotFoundException.java

@@ -1,4 +1,4 @@
-package app.mar.exceptions;
+package macampcorp.macamp.exceptions;
 
 public class ResourceNotFoundException extends RuntimeException {
     public ResourceNotFoundException(String name) {

+ 4 - 3
app/src/main/java/app/mar/game/Bomb.java → app/src/main/java/macampcorp/macamp/game/Bomb.java

@@ -1,4 +1,4 @@
-package app.mar.game;
+package macampcorp.macamp.game;
 
 import android.util.Log;
 
@@ -9,6 +9,8 @@ import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 
+import macampcorp.macamp.utils.L;
+
 public class Bomb implements Serializable{
 
     public  static final int BOMB_UNARMED=0;
@@ -60,9 +62,8 @@ public class Bomb implements Serializable{
 
     public void addKnownCharacter(int pos)
     {
-        Log.e("*********", "addKnowChar: "+pos);
+        L.debug("Bomb_debug","Adding character "+pos);
         if(pos<0) return;
-        Log.e("*********", "\t \tOK");
         mPasswordKnown[pos]=mPassword.charAt(pos);
     }
 

+ 13 - 9
app/src/main/java/app/mar/game/Event.java → app/src/main/java/macampcorp/macamp/game/Event.java

@@ -1,4 +1,4 @@
-package app.mar.game;
+package macampcorp.macamp.game;
 
 import android.app.Activity;
 import android.app.AlertDialog;
@@ -15,9 +15,11 @@ import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 
-import app.mar.activities.ChallengeDriver;
-import app.mar.exceptions.BadConfigFileException;
-import app.mar.exceptions.BadGameConfigException;
+import macampcorp.macamp.activities.ChallengeDriver;
+import macampcorp.macamp.activities.TutoActivity;
+import macampcorp.macamp.exceptions.BadConfigFileException;
+import macampcorp.macamp.exceptions.BadGameConfigException;
+import macampcorp.macamp.utils.L;
 
 public class Event implements Serializable {
 
@@ -138,11 +140,7 @@ public class Event implements Serializable {
     {
         long time = g.getBomb().getSecondsBeforeBoom();
         long seuil = argAsInt(0, 15) * 60;
-        Log.e("___PARAM___", "Seuil = "+seuil+" secondes");
-        Log.e("___PARAM___", "Ancien temps = "+time+" secondes");
         long newTime = (time>seuil)?seuil:time;
-        Log.e("___PARAM___", "Nouveau temps = "+newTime+" secondes");
-        Log.e("___PARAM___", " ");
         g.getBomb().setSecondsBeforeBoom(newTime);
         return new EventReturn(0,"OK");
     }
@@ -151,7 +149,7 @@ public class Event implements Serializable {
     public EventReturn print(Activity a, Game g)
     {
         Toast.makeText(a, argAsString(0, "Error"), Toast.LENGTH_LONG).show();
-        Log.e( "___DEBUG_EXEC_PRINT___", argAsString(0, "Error"));
+        L.info(  argAsString(0, "Error"));
         return new EventReturn(0,"OK");
     }
 
@@ -179,6 +177,12 @@ public class Event implements Serializable {
         return new EventReturn(0,"OK");
     }
 
+    public EventReturn tuto(Activity a, Game g)
+    {
+        TutoActivity.start(a);
+        return new EventReturn(0, "OK");
+    }
+
     public String getMethod() {
         return mMethod;
     }

+ 21 - 57
app/src/main/java/app/mar/game/Game.java → app/src/main/java/macampcorp/macamp/game/Game.java

@@ -1,4 +1,4 @@
-package app.mar.game;
+package macampcorp.macamp.game;
 
 import android.app.Activity;
 import android.content.Context;
@@ -16,13 +16,14 @@ import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.util.ArrayList;
 
-import app.mar.activities.ChallengeDriver;
-import app.mar.exceptions.BadGameConfigException;
-import app.mar.game.challenges.Challenge;
-import app.mar.game.challenges.ChallengeReturn;
-import app.mar.game.scheduler.Scheduler;
-import app.mar.game.scheduler.SpecialTask;
-import app.mar.utils.files.JSONAssetsManager;
+import macampcorp.macamp.activities.ChallengeDriver;
+import macampcorp.macamp.exceptions.BadGameConfigException;
+import macampcorp.macamp.game.challenges.Challenge;
+import macampcorp.macamp.game.challenges.ChallengeReturn;
+import macampcorp.macamp.game.scheduler.Scheduler;
+import macampcorp.macamp.game.scheduler.SpecialTask;
+import macampcorp.macamp.utils.L;
+import macampcorp.macamp.utils.files.JSONAssetsManager;
 
 /**
  * Created by ptitcois on 19/08/16.
@@ -53,15 +54,21 @@ public class Game  implements Serializable {
         mName=name;
         mInventaire=new Inventaire();
 
+        if(root==null)
+        {
+            throw new BadGameConfigException("Le fichier JSON n'a pas pu être parsé");
+        }
+
         try {
             JSONArray arr = root.getJSONArray("stages");
+            if(arr==null) throw new JSONException("Not defined");
             for(int i=0; i<arr.length(); i++)
                 mStages.add(new Stage(this, arr.getJSONObject(i), act));
         } catch (JSONException e) {
             e.printStackTrace();
-            loge("Erreur le nombre d'étape n'est pas renseigné:");
-            loge(e.getMessage());
-            loge(e.getStackTrace().toString());
+            L.error("Erreur le nombre d'étape n'est pas renseigné:");
+            L.error(e.getMessage());
+            L.error(e.getStackTrace().toString());
             throw new BadGameConfigException("Bad parameter 'stages'");
         }
 
@@ -70,9 +77,9 @@ public class Game  implements Serializable {
             mBomb=new Bomb(root.getString("password"), root.getInt("max_time"));
         } catch (JSONException e) {
             e.printStackTrace();
-            loge("Erreur le password:");
-            loge(e.getMessage());
-            loge(e.getStackTrace().toString());
+            L.error("Erreur le password:");
+            L.error(e.getMessage());
+            L.error(e.getStackTrace().toString());
             throw new BadGameConfigException("Bad parameter 'password'");
         }
 
@@ -309,47 +316,4 @@ public class Game  implements Serializable {
 
 
 
-
-
-
-
-    private static String sLog="";
-
-    public static String getlog(){ return sLog; }
-
-    public static String dumpLog(){
-        String log = sLog;
-        sLog="";
-        return log;
-    }
-
-    public static void loge(String text)
-    {
-        log(text);
-        Log.e("custom_log", text);
-    }
-    public static void logw(String text)
-    {
-        log(text);
-        Log.w("custom_log", text);
-    }
-    public static void logv(String text)
-    {
-        if(false) log(text);
-        Log.v("custom_log", text);
-    }
-    public static void logi(String text)
-    {
-        if(false) log(text);
-        Log.i("custom_log", text);
-    }
-
-    public static void log(String text)
-    {
-        sLog+=text+"\n";
-    }
-    protected static boolean sFail=false;
-    public static void fail() {sFail=true;}
-    public static boolean isFailed(){return sFail;}
-    public static void resetFail(){sFail=false;}
 }

+ 2 - 2
app/src/main/java/app/mar/game/Indice.java → app/src/main/java/macampcorp/macamp/game/Indice.java

@@ -1,11 +1,11 @@
-package app.mar.game;
+package macampcorp.macamp.game;
 
 import org.json.JSONException;
 import org.json.JSONObject;
 
 import java.io.Serializable;
 
-import app.mar.exceptions.BadConfigFileException;
+import macampcorp.macamp.exceptions.BadConfigFileException;
 
 public class Indice implements Serializable {
     protected  float mPenality=-1;

+ 1 - 1
app/src/main/java/app/mar/game/Inventaire.java → app/src/main/java/macampcorp/macamp/game/Inventaire.java

@@ -1,4 +1,4 @@
-package app.mar.game;
+package macampcorp.macamp.game;
 
 import java.io.Serializable;
 import java.util.ArrayList;

+ 1 - 1
app/src/main/java/app/mar/game/QRCodeReturn.java → app/src/main/java/macampcorp/macamp/game/QRCodeReturn.java

@@ -1,4 +1,4 @@
-package app.mar.game;
+package macampcorp.macamp.game;
 
 import java.io.Serializable;
 

+ 26 - 19
app/src/main/java/app/mar/game/Resource.java → app/src/main/java/macampcorp/macamp/game/Resource.java

@@ -1,4 +1,4 @@
-package app.mar.game;
+package macampcorp.macamp.game;
 
 import android.app.Activity;
 import android.app.AlertDialog;
@@ -13,11 +13,12 @@ import org.json.JSONObject;
 import java.io.Serializable;
 import java.util.ArrayList;
 
-import app.mar.exceptions.BadConfigFileException;
-import app.mar.exceptions.BadResourceConfigException;
-import app.mar.exceptions.ResourceFileNotFoundException;
-import app.mar.exceptions.ResourceNotFoundException;
-import app.mar.utils.files.JSONAssetsManager;
+import macampcorp.macamp.exceptions.BadConfigFileException;
+import macampcorp.macamp.exceptions.BadResourceConfigException;
+import macampcorp.macamp.exceptions.ResourceFileNotFoundException;
+import macampcorp.macamp.exceptions.ResourceNotFoundException;
+import macampcorp.macamp.utils.L;
+import macampcorp.macamp.utils.files.JSONAssetsManager;
 /**
  * Created by ptitcois on 19/08/16.
  */
@@ -28,6 +29,7 @@ public class Resource implements Serializable {
     protected boolean isLoaded = false;
     protected boolean mIsDisplay = false;
     protected int   mStage;
+    protected String mImage;
     protected String mType = ""; //3D Image Audio Video
     protected String mTitle= ""; //3D Image Audio Video
     private  static JSONObject mRessourcesList = null;
@@ -47,11 +49,11 @@ public class Resource implements Serializable {
     public static void initResourceList(Activity act)
     {
         if(mRessourcesList!=null) return;
-        Game.logv( "Chargement de la liste des ressources...");
+        L.info( "Chargement de la liste des ressources...");
         JSONObject obj = JSONAssetsManager.load(act, "ressources.res");
         if(obj==null)
         {
-            Game.logw("Attention il n'existe pas de fichier pour la liste des ressrouecs");
+            L.warn("Attention il n'existe pas de fichier pour la liste des ressrouecs");
             return;
         }
         mRessourcesList=obj;
@@ -63,17 +65,11 @@ public class Resource implements Serializable {
             if(mRessourcesList!=null)
                 return mRessourcesList.getJSONObject(name);
         } catch (JSONException e) {
-            Game.logw("Impossiblle de trouver la ressource '"+name+"' dans la liste des ressources");
+            L.warn("Impossiblle de trouver la ressource '"+name+"' dans la liste des ressources");
         }
         return null;
     }
 
-    public static void logNotFound()
-    {
-        Log.e("LoadingRes", "Liste des ressources non-trouvées:");
-        for(int i=0; i<mNotFound.size(); i++)
-            Log.e("LoadingRes", "\t'"+mNotFound.get(i)+"'");
-    }
 
     public static void setNotFound(String name)
     {
@@ -85,14 +81,13 @@ public class Resource implements Serializable {
     protected void loadResourceData(Activity act)
     {
         initResourceList(act);
-        Game.logv( "--- Chargement de la ressource '"+mName+"' --- ");
+        L.info( "--- Chargement de la ressource '"+mName+"' --- ");
         JSONObject obj = JSONAssetsManager.load(act, mName+".res");
         if(obj==null) obj = getRessourceDataFromList(mName);
         if(obj == null)
         {
-            Game.loge("\tLa ressource '"+mName+"' est introuvable.");
+            L.error("\tLa ressource '"+mName+"' est introuvable.");
             setNotFound(mName);
-            Game.fail();
             throw new ResourceNotFoundException(mName);
         }
 
@@ -101,7 +96,7 @@ public class Resource implements Serializable {
             mType = obj.getString("type");
         } catch(JSONException e)
         {
-            Game.loge("\tLa ressource '"+mName+"' n'a pas d'attribut 'type' valide (String)");
+            L.error("\tLa ressource '"+mName+"' n'a pas d'attribut 'type' valide (String)");
             e.printStackTrace();
             throw new BadResourceConfigException("Bad parameter 'type' ");
         }
@@ -115,6 +110,13 @@ public class Resource implements Serializable {
             mComment=obj.getString("comment");
         } catch (JSONException e) {
         }
+
+        try {
+            mImage=obj.getString("image");
+        } catch (JSONException e) {
+            mImage="appel.png";
+        }
+
         try {
             mStage = obj.getInt("stage");
             isLoaded=true;
@@ -180,6 +182,11 @@ public class Resource implements Serializable {
         return jo;
     }
 
+    public String getimage()
+    {
+        return mImage;
+    }
+
 
     public String toString()
     {

+ 1 - 1
app/src/main/java/app/mar/game/ResourceManager.java → app/src/main/java/macampcorp/macamp/game/ResourceManager.java

@@ -1,4 +1,4 @@
-package app.mar.game;
+package macampcorp.macamp.game;
 
 import android.app.Activity;
 

+ 3 - 3
app/src/main/java/app/mar/game/Stage.java → app/src/main/java/macampcorp/macamp/game/Stage.java

@@ -1,4 +1,4 @@
-package app.mar.game;
+package macampcorp.macamp.game;
 
 import android.app.Activity;
 import android.util.Log;
@@ -10,8 +10,8 @@ import org.json.JSONObject;
 import java.io.Serializable;
 import java.util.ArrayList;
 
-import app.mar.activities.ChallengeDriver;
-import app.mar.game.challenges.Challenge;
+import macampcorp.macamp.activities.ChallengeDriver;
+import macampcorp.macamp.game.challenges.Challenge;
 
 public class Stage  implements Serializable {
     protected String mName;

+ 37 - 0
app/src/main/java/macampcorp/macamp/game/challenges/BombDefuse.java

@@ -0,0 +1,37 @@
+package macampcorp.macamp.game.challenges;
+
+import android.app.Activity;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+
+import macampcorp.macamp.activities.fragments.BombFragment;
+import macampcorp.macamp.activities.fragments.QCMFragment;
+import macampcorp.macamp.exceptions.BadChallengeConfigException;
+import macampcorp.macamp.game.Game;
+
+public class BombDefuse extends Challenge {
+
+    protected String mText;
+
+    public BombDefuse(Game g, JSONObject root, Activity act) {
+        super(g, root,  BombFragment.class, act);
+        mStartWith= BombFragment.class;
+        try {
+            mText = root.getString("text");
+        }catch(JSONException e)
+        {
+            e.printStackTrace();
+            throw new RuntimeException("Error BombDefuse: bad parameter 'text' :  "+e.getMessage());
+        }
+    }
+
+    public static final int REQUEST_CODE=1900;
+
+    public int getResultCode() { return REQUEST_CODE; }
+
+    public  String getmText() { return mText;}
+}

+ 12 - 9
app/src/main/java/app/mar/game/challenges/Challenge.java → app/src/main/java/macampcorp/macamp/game/challenges/Challenge.java

@@ -1,4 +1,4 @@
-package app.mar.game.challenges;
+package macampcorp.macamp.game.challenges;
 
 import android.app.Activity;
 import android.util.Log;
@@ -12,12 +12,13 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 
-import app.mar.activities.ChallengeDriver;
-import app.mar.exceptions.BadChallengeConfigException;
-import app.mar.exceptions.BadResourceTypeException;
-import app.mar.game.Event;
-import app.mar.game.Game;
-import app.mar.game.Indice;
+import macampcorp.macamp.activities.ChallengeDriver;
+import macampcorp.macamp.exceptions.BadChallengeConfigException;
+import macampcorp.macamp.exceptions.BadResourceTypeException;
+import macampcorp.macamp.game.Event;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.game.Indice;
+import macampcorp.macamp.utils.L;
 
 public abstract class Challenge implements Serializable{
 
@@ -152,7 +153,9 @@ public abstract class Challenge implements Serializable{
     public static Class getChallengeClass(String classe)
     {
         try {
-            Class cls = Class.forName("app.mar.game.challenges."+classe);
+            L.debug("Load class : 'macampcorp.macamp.game.challenges."+classe+"'");
+            Class cls = Class.forName("macampcorp.macamp.game.challenges."+classe);
+            L.debug("Load class : 'macampcorp.macamp.game.challenges."+classe+"' loaded");
             return cls;
         }
         catch(ClassNotFoundException cnfe)
@@ -176,7 +179,7 @@ public abstract class Challenge implements Serializable{
     public static Challenge callChallengeConstructor(String classe, Game g,JSONObject o, Activity a)
     {
         Constructor constr = getChallengeConstructor(classe);
-        Log.e("--------", "callChallenge : '"+classe+"' ");
+        L.debug("callChallenge : '"+classe+"' ");
         try {
             return ((Challenge) constr.newInstance(g, o, a));
         } catch (InstantiationException e) {

+ 1 - 1
app/src/main/java/app/mar/game/challenges/ChallengeReturn.java → app/src/main/java/macampcorp/macamp/game/challenges/ChallengeReturn.java

@@ -1,4 +1,4 @@
-package app.mar.game.challenges;
+package macampcorp.macamp.game.challenges;
 
 public class ChallengeReturn {
     public  static final int BAD_RESPONS = -3;

+ 4 - 4
app/src/main/java/app/mar/game/challenges/QCM.java → app/src/main/java/macampcorp/macamp/game/challenges/QCM.java

@@ -1,4 +1,4 @@
-package app.mar.game.challenges;
+package macampcorp.macamp.game.challenges;
 
 import android.app.Activity;
 
@@ -8,9 +8,9 @@ import org.json.JSONObject;
 
 import java.util.ArrayList;
 
-import app.mar.activities.fragments.QCMFragment;
-import app.mar.exceptions.BadChallengeConfigException;
-import app.mar.game.Game;
+import macampcorp.macamp.activities.fragments.QCMFragment;
+import macampcorp.macamp.exceptions.BadChallengeConfigException;
+import macampcorp.macamp.game.Game;
 
 public class QCM extends Question{
 

+ 4 - 4
app/src/main/java/app/mar/game/challenges/QRCodeTreasure.java → app/src/main/java/macampcorp/macamp/game/challenges/QRCodeTreasure.java

@@ -1,13 +1,13 @@
-package app.mar.game.challenges;
+package macampcorp.macamp.game.challenges;
 
 import android.app.Activity;
 
 import org.json.JSONException;
 import org.json.JSONObject;
 
-import app.mar.activities.fragments.QRCodeFragment;
-import app.mar.exceptions.BadChallengeConfigException;
-import app.mar.game.Game;
+import macampcorp.macamp.activities.fragments.QRCodeFragment;
+import macampcorp.macamp.exceptions.BadChallengeConfigException;
+import macampcorp.macamp.game.Game;
 
 public class QRCodeTreasure extends Challenge {
 

+ 5 - 5
app/src/main/java/app/mar/game/challenges/Question.java → app/src/main/java/macampcorp/macamp/game/challenges/Question.java

@@ -1,4 +1,4 @@
-package app.mar.game.challenges;
+package macampcorp.macamp.game.challenges;
 
 import android.app.Activity;
 import android.util.Log;
@@ -9,10 +9,10 @@ import org.json.JSONObject;
 
 import java.util.ArrayList;
 
-import app.mar.activities.fragments.QuestionFragment;
-import app.mar.exceptions.BadChallengeConfigException;
-import app.mar.game.Game;
-import app.mar.utils.Levenshtein;
+import macampcorp.macamp.activities.fragments.QuestionFragment;
+import macampcorp.macamp.exceptions.BadChallengeConfigException;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.utils.Levenshtein;
 
 public class Question extends Challenge {
 

+ 4 - 4
app/src/main/java/app/mar/game/scheduler/ChallengeTask.java → app/src/main/java/macampcorp/macamp/game/scheduler/ChallengeTask.java

@@ -1,8 +1,8 @@
-package app.mar.game.scheduler;
+package macampcorp.macamp.game.scheduler;
 
-import app.mar.activities.ChallengeDriver;
-import app.mar.game.Game;
-import app.mar.game.challenges.Challenge;
+import macampcorp.macamp.activities.ChallengeDriver;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.game.challenges.Challenge;
 
 public class ChallengeTask extends Task {
 

+ 4 - 4
app/src/main/java/app/mar/game/scheduler/EventTask.java → app/src/main/java/macampcorp/macamp/game/scheduler/EventTask.java

@@ -1,9 +1,9 @@
-package app.mar.game.scheduler;
+package macampcorp.macamp.game.scheduler;
 
 
-import app.mar.activities.ChallengeDriver;
-import app.mar.game.Event;
-import app.mar.game.Game;
+import macampcorp.macamp.activities.ChallengeDriver;
+import macampcorp.macamp.game.Event;
+import macampcorp.macamp.game.Game;
 
 public class EventTask extends Task {
     protected Event mEvent;

+ 4 - 4
app/src/main/java/app/mar/game/scheduler/ResourceTask.java → app/src/main/java/macampcorp/macamp/game/scheduler/ResourceTask.java

@@ -1,8 +1,8 @@
-package app.mar.game.scheduler;
+package macampcorp.macamp.game.scheduler;
 
-import app.mar.activities.ChallengeDriver;
-import app.mar.game.Game;
-import app.mar.game.Resource;
+import macampcorp.macamp.activities.ChallengeDriver;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.game.Resource;
 
 public class ResourceTask extends Task {
 

+ 7 - 9
app/src/main/java/app/mar/game/scheduler/Scheduler.java → app/src/main/java/macampcorp/macamp/game/scheduler/Scheduler.java

@@ -1,4 +1,4 @@
-package app.mar.game.scheduler;
+package macampcorp.macamp.game.scheduler;
 
 import android.app.Activity;
 import android.content.Intent;
@@ -7,12 +7,12 @@ import android.util.Log;
 import java.io.Serializable;
 import java.util.ArrayList;
 
-import app.mar.activities.ChallengeDriver;
-import app.mar.activities.HostActivity;
-import app.mar.game.Event;
-import app.mar.game.Game;
-import app.mar.game.Resource;
-import app.mar.game.challenges.Challenge;
+import macampcorp.macamp.activities.ChallengeDriver;
+import macampcorp.macamp.activities.HostActivity;
+import macampcorp.macamp.game.Event;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.game.Resource;
+import macampcorp.macamp.game.challenges.Challenge;
 
 
 public class Scheduler implements Serializable {
@@ -39,7 +39,6 @@ public class Scheduler implements Serializable {
         //Log.e("___SCHEDULER_DEBUG___AP", "Ajout de : "+t.toString()+" : "+toString());
         if(mStart==null) mStart=t;
         else mStart.enqueue(t);
-        Log.e("___", "ok");
     }
 
     public void append(Challenge c)
@@ -114,7 +113,6 @@ public class Scheduler implements Serializable {
         Task sec = mStart;
         mStart=t;
         mStart.end().mNext=sec;
-        Log.e("___", "ok");
     }
 
     public void clear()

+ 4 - 4
app/src/main/java/app/mar/game/scheduler/SpecialTask.java → app/src/main/java/macampcorp/macamp/game/scheduler/SpecialTask.java

@@ -1,11 +1,11 @@
-package app.mar.game.scheduler;
+package macampcorp.macamp.game.scheduler;
 
 import android.app.Activity;
 import android.content.Intent;
 
-import app.mar.activities.BombActivity;
-import app.mar.activities.ChallengeDriver;
-import app.mar.game.Game;
+import macampcorp.macamp.activities.BombActivity;
+import macampcorp.macamp.activities.ChallengeDriver;
+import macampcorp.macamp.game.Game;
 
 public class SpecialTask extends Task {
 

+ 3 - 3
app/src/main/java/app/mar/game/scheduler/Task.java → app/src/main/java/macampcorp/macamp/game/scheduler/Task.java

@@ -1,9 +1,9 @@
-package app.mar.game.scheduler;
+package macampcorp.macamp.game.scheduler;
 
 import java.io.Serializable;
 
-import app.mar.activities.ChallengeDriver;
-import app.mar.game.Game;
+import macampcorp.macamp.activities.ChallengeDriver;
+import macampcorp.macamp.game.Game;
 
 public abstract class Task implements Serializable {
     public final static int TASK_NONE=0;

+ 1 - 1
app/src/main/java/app/mar/ui/CustomListView.java → app/src/main/java/macampcorp/macamp/ui/CustomListView.java

@@ -1,4 +1,4 @@
-package app.mar.ui;
+package macampcorp.macamp.ui;
 
 import android.content.Context;
 import android.util.AttributeSet;

+ 3 - 3
app/src/main/java/app/mar/ui/MediaView.java → app/src/main/java/macampcorp/macamp/ui/MediaView.java

@@ -1,4 +1,4 @@
-package app.mar.ui;
+package macampcorp.macamp.ui;
 
 import android.app.Activity;
 import android.content.Context;
@@ -12,8 +12,8 @@ import android.view.View;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 
-import app.mar.exceptions.ResourceFileNotFoundException;
-import app.mar.utils.files.FileManager;
+import macampcorp.macamp.exceptions.ResourceFileNotFoundException;
+import macampcorp.macamp.utils.files.FileManager;
 
 /**
  * Created by ptitcois on 27/03/17.

+ 3 - 3
app/src/main/java/app/mar/ui/ResourceArrayAdapter.java → app/src/main/java/macampcorp/macamp/ui/ResourceArrayAdapter.java

@@ -1,4 +1,4 @@
-package app.mar.ui;
+package macampcorp.macamp.ui;
 
 import android.content.Context;
 import android.content.Intent;
@@ -12,8 +12,8 @@ import android.widget.TextView;
 
 import java.util.List;
 
-import app.mar.utils.AndroidResources;
-import app.mar.game.Resource;
+import macampcorp.macamp.utils.AndroidResources;
+import macampcorp.macamp.game.Resource;
 
 
 /**

+ 7 - 29
app/src/main/java/app/mar/utils/AndroidResources.java → app/src/main/java/macampcorp/macamp/utils/AndroidResources.java

@@ -1,15 +1,13 @@
-package app.mar.utils;
+package macampcorp.macamp.utils;
 
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
-import android.net.Uri;
 
-import app.mar.activities.viewers.ImageViewerActivity;
-import app.mar.activities.viewers.MediaViewerAcitvity;
-import app.mar.activities.viewers.TestVideoActivity;
-import app.mar.game.Game;
-import app.mar.game.Resource;
+import macampcorp.macamp.activities.viewers.ImageViewerActivity;
+import macampcorp.macamp.activities.viewers.MediaViewerAcitvity;
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.game.Resource;
 
 /**
  * Created by ptitcois on 14/03/17.
@@ -17,22 +15,6 @@ import app.mar.game.Resource;
 public class AndroidResources {
 
 
-    private static Uri _getAudioVideo(String name, String suffix)
-    {
-        String path="android.resource://app.brest.testmin3d/raw/"+name+"_"+suffix;
-        return Uri.parse(path);
-    }
-
-    public static Uri getVideo(String name)
-    {
-        return _getAudioVideo(name, "video");
-    }
-
-
-    public static Uri getAudio(String name)
-    {
-        return _getAudioVideo(name, "audio");
-    }
 
     public static Drawable getImage()
     {
@@ -41,20 +23,16 @@ public class AndroidResources {
 
     public static int getViewerRequestCode( Resource re)
     {
-        if(re.isAudio())
+        if(re.isAudio() || re.isVideo())
             return MediaViewerAcitvity.REQUEST_CODE;
-        else if( re.isVideo())
-            return TestVideoActivity.REQUEST_CODE;
         else
             return ImageViewerActivity.REQUEST_CODE;
     }
     public static Intent getViewerIntent(Context c, Resource re)
     {
         Intent intent =null ;
-        if(re.isAudio())
+        if(re.isAudio() || re.isVideo())
             intent = new Intent(c, MediaViewerAcitvity.class);
-        else if( re.isVideo())
-            intent = new Intent(c, TestVideoActivity.class);
         else if(re.isImage())
             intent= new Intent(c, ImageViewerActivity.class);
 

+ 1 - 1
app/src/main/java/app/mar/utils/FontChangeCrawler.java → app/src/main/java/macampcorp/macamp/utils/FontChangeCrawler.java

@@ -1,4 +1,4 @@
-package app.mar.utils;
+package macampcorp.macamp.utils;
 
 import android.app.Activity;
 import android.content.Context;

+ 2 - 2
app/src/main/java/app/mar/utils/JSONLoader.java → app/src/main/java/macampcorp/macamp/utils/JSONLoader.java

@@ -1,4 +1,4 @@
-package app.mar.utils;
+package macampcorp.macamp.utils;
 
 import android.app.Activity;
 import android.util.Log;
@@ -29,7 +29,7 @@ public class JSONLoader {
         } 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());

+ 2 - 2
app/src/main/java/app/mar/utils/L.java → app/src/main/java/macampcorp/macamp/utils/L.java

@@ -1,9 +1,9 @@
-package app.mar.utils;
+package macampcorp.macamp.utils;
 
 import android.util.Log;
 
 public class L {
-    public static String PREFIXE = "app.mar.activity";
+    public static String PREFIXE = "macampcorp.macamp.activities";
 
     public static void debug(String prefix, String a)
     {

+ 1 - 1
app/src/main/java/app/mar/utils/Levenshtein.java → app/src/main/java/macampcorp/macamp/utils/Levenshtein.java

@@ -6,7 +6,7 @@
 // /2018-02-18-deprecation-notice-removing-anonymous-gist-creation/
 //*******************************************************************
 
-package app.mar.utils;
+package macampcorp.macamp.utils;
 
 import java.lang.Math; // headers MUST be above the first class
 import java.text.Normalizer;

+ 4 - 2
app/src/main/java/app/mar/utils/files/FileManager.java → app/src/main/java/macampcorp/macamp/utils/files/FileManager.java

@@ -1,4 +1,4 @@
-package app.mar.utils.files;
+package macampcorp.macamp.utils.files;
 
 import android.app.Activity;
 import android.content.Context;
@@ -12,6 +12,8 @@ import android.util.Log;
 import java.io.IOException;
 import java.io.InputStream;
 
+import macampcorp.macamp.utils.L;
+
 /**
  * Created by ptitcois on 27/03/17.
  */
@@ -64,7 +66,7 @@ public class FileManager {
         {
             InputStream is = openFile(a, path+IMG_EXT[i]);
             if(is!=null) {
-                Log.e("------", "Image found at '"+(path+IMG_EXT[i])+"'");
+                L.error("Image found at '"+(path+IMG_EXT[i])+"'");
                 return is;
             }
         }

+ 1 - 3
app/src/main/java/app/mar/utils/files/JSONAssetsManager.java → app/src/main/java/macampcorp/macamp/utils/files/JSONAssetsManager.java

@@ -1,4 +1,4 @@
-package app.mar.utils.files;
+package macampcorp.macamp.utils.files;
 
 import android.app.Activity;
 import android.util.Log;
@@ -36,7 +36,6 @@ public class JSONAssetsManager {
         } catch (Exception e) {
             return null;
         }
-        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());
@@ -68,7 +67,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.
             JSONArray jObject = new JSONArray(byteArrayOutputStream.toString());

+ 0 - 7
app/src/main/res/drawable-mdpi/uibuttoncircle.xml

@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-  <item android:drawable="@drawable/bscanner_tap" android:state_enabled="false"/>
-  <item android:drawable="@drawable/bscanner_tap" android:state_pressed="true"/>
-  <item android:drawable="@drawable/bscanner_tap" android:state_focused="true"/>
-  <item android:drawable="@drawable/bscanner"/>
-</selector>

二进制
app/src/main/res/drawable/ar_green.png


二进制
app/src/main/res/drawable/ar_none.png


二进制
app/src/main/res/drawable/ar_red.png


二进制
app/src/main/res/drawable/ar_skin.png


二进制
app/src/main/res/drawable/ar_white.png


二进制
app/src/main/res/drawable/arrow_left.png


二进制
app/src/main/res/drawable/arrow_right.png


二进制
app/src/main/res/drawable/audio.png


二进制
app/src/main/res/drawable/background.png


二进制
app/src/main/res/drawable/bscanner.png


二进制
app/src/main/res/drawable/bscanner_tap.png


二进制
app/src/main/res/drawable/button.png


二进制
app/src/main/res/drawable/button_tap.png


二进制
app/src/main/res/drawable/fleche.png


二进制
app/src/main/res/drawable/send.png


二进制
app/src/main/res/drawable/title.png


二进制
app/src/main/res/drawable/togglebutton_off.png


二进制
app/src/main/res/drawable/togglebutton_on.png


+ 0 - 7
app/src/main/res/drawable/uibuttoncircle.xml

@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-  <item android:drawable="@drawable/bscanner_tap" android:state_enabled="false"/>
-  <item android:drawable="@drawable/bscanner_tap" android:state_pressed="true"/>
-  <item android:drawable="@drawable/bscanner_tap" android:state_focused="true"/>
-  <item android:drawable="@drawable/bscanner"/>
-</selector>

+ 1 - 1
app/src/main/res/layout/activity_bomb.xml

@@ -6,7 +6,7 @@
     android:layout_height="match_parent"
     android:gravity="center|end"
     android:orientation="vertical"
-    tools:context="app.mar.activities.BombActivity">
+    tools:context="macampcorp.macamp.activities.BombActivity">
 
     <TextView
         android:id="@+id/textView9"

+ 1 - 1
app/src/main/res/layout/activity_credits.xml

@@ -7,7 +7,7 @@
     android:paddingLeft="@dimen/activity_horizontal_margin"
     android:paddingRight="@dimen/activity_horizontal_margin"
     android:paddingTop="@dimen/activity_vertical_margin"
-    tools:context="app.mar.activities.CreditsActivity">
+    tools:context="macampcorp.macamp.activities.CreditsActivity">
 
     <ScrollView
         android:layout_width="wrap_content"

+ 1 - 1
app/src/main/res/layout/activity_error.xml

@@ -6,7 +6,7 @@
     android:layout_height="match_parent"
     android:gravity="top"
     android:orientation="vertical"
-    tools:context="app.mar.activities.ErrorActivity">
+    tools:context="macampcorp.macamp.activities.ErrorActivity">
 
 
     <TextView

+ 1 - 1
app/src/main/res/layout/activity_host.xml

@@ -4,7 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context="app.mar.activities.HostActivity">
+    tools:context="macampcorp.macamp.activities.HostActivity">
 
 
     <LinearLayout

+ 1 - 1
app/src/main/res/layout/activity_loading.xml

@@ -4,7 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context="app.mar.activities.LoadingActivity">
+    tools:context="macampcorp.macamp.activities.LoadingActivity">
 
     <Button
         android:id="@+id/button10"

+ 0 - 54
app/src/main/res/layout/activity_model_viewer.xml

@@ -1,54 +0,0 @@
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context=".viewers.ImageViewerActivity"
-    android:background="@drawable/background"
-    android:id="@+id/rl_screen">
-
-    <!-- The primary full-screen view. This can be replaced with whatever view
-         is needed to present your content, e.g. VideoView, SurfaceView,
-         TextureView, etc. -->
-
-    <!-- This FrameLayout insets its children based on system windows using
-         android:fitsSystemWindows. -->
-
-    <Button
-        android:layout_width="match_parent"
-        android:layout_height="150px"
-        android:text="@string/informations"
-        android:id="@+id/info"
-        android:layout_alignParentBottom="true"
-        android:layout_centerHorizontal="true"
-        android:onClick="onClickInfo"
-        android:background="@drawable/uibutton"
-        android:textColor="@color/dull_4"
-        android:textStyle="bold"
-        android:textSize="25px" />
-
-    <FrameLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_above="@+id/info"
-        android:id="@+id/frame_viewer"
-        android:layout_below="@+id/title">
-
-    </FrameLayout>
-
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:textAppearance="?android:attr/textAppearanceLarge"
-        android:text="Large Text"
-        android:id="@+id/title"
-        android:layout_alignParentTop="true"
-        android:layout_alignParentRight="true"
-        android:layout_alignParentEnd="true"
-        android:layout_alignParentLeft="true"
-        android:layout_alignParentStart="true"
-        android:textColor="@color/dull_5"
-        android:textStyle="bold"
-        android:textSize="25dp"
-        android:textAlignment="center" />
-
-</RelativeLayout>

+ 1 - 1
app/src/main/res/layout/activity_permission.xml

@@ -7,7 +7,7 @@
     android:paddingLeft="@dimen/activity_horizontal_margin"
     android:paddingRight="@dimen/activity_horizontal_margin"
     android:paddingTop="@dimen/activity_vertical_margin"
-    tools:context="app.mar.activities.PermissionActivity">
+    tools:context="macampcorp.macamp.activities.PermissionActivity">
 
     <Button
         android:id="@+id/understood"

+ 1 - 2
app/src/main/res/layout/activity_resource_list.xml

@@ -3,7 +3,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
-    tools:context="app.mar.activities.viewers.ResourceListActivity">
+    tools:context="macampcorp.macamp.activities.viewers.ResourceListActivity">
 
     <!-- The primary full-screen view. This can be replaced with whatever view
          is needed to present your content, e.g. VideoView, SurfaceView,
@@ -17,7 +17,6 @@
         android:layout_width="match_parent"
         android:layout_height="70dp"
         android:layout_gravity="center_horizontal"
-        android:background="@drawable/title"
         android:text="Vidéos"
         android:textSize="30dp"
         android:textStyle="bold" />

+ 0 - 81
app/src/main/res/layout/activity_test_video.xml

@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:paddingBottom="@dimen/activity_vertical_margin"
-    android:paddingLeft="@dimen/activity_horizontal_margin"
-    android:paddingRight="@dimen/activity_horizontal_margin"
-    android:paddingTop="@dimen/activity_vertical_margin"
-    tools:context="app.mar.activities.viewers.TestVideoActivity">
-
-
-
-    <ImageButton
-        android:layout_width="40dp"
-        android:layout_height="40dp"
-        android:id="@+id/play"
-        android:layout_alignTop="@+id/fullscreen"
-        android:layout_toLeftOf="@+id/fullscreen"
-        android:layout_toStartOf="@+id/fullscreen"
-        android:onClick="onPlayPause"
-        android:src="@android:drawable/ic_media_pause" />
-
-    <SeekBar
-        android:id="@+id/seekBar"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignBottom="@+id/play"
-        android:layout_alignParentLeft="true"
-        android:layout_alignParentStart="true"
-        android:layout_below="@+id/title"
-        android:layout_toLeftOf="@+id/play"
-        android:layout_toStartOf="@+id/play" />
-
-    <TextView
-        android:id="@+id/title"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_alignParentEnd="true"
-        android:layout_alignParentLeft="true"
-        android:layout_alignParentRight="true"
-        android:layout_alignParentStart="true"
-        android:layout_alignParentTop="true"
-        android:textAlignment="center"
-        android:textAppearance="?android:attr/textAppearanceLarge"
-        android:textSize="25dp"
-        android:textStyle="bold" />
-
-    <ImageButton
-        android:layout_width="40dp"
-        android:layout_height="40dp"
-        android:id="@+id/fullscreen"
-        android:layout_below="@+id/title"
-        android:onClick="onFullscreen"
-        android:src="@android:drawable/ic_menu_crop"
-        android:layout_alignParentRight="true"
-        android:layout_alignParentEnd="true" />
-
-    <RelativeLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_below="@+id/seekBar"
-        android:layout_alignParentLeft="true"
-        android:layout_alignParentStart="true"
-        android:layout_above="@+id/info"
-        android:gravity="center">
-
-        <FrameLayout
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_alignParentTop="true"
-            android:layout_alignParentLeft="true"
-            android:layout_alignParentStart="true"
-            android:layout_alignParentBottom="true"
-            android:layout_alignParentRight="true"
-            android:id="@+id/media_viewer"></FrameLayout>
-
-    </RelativeLayout>
-
-</RelativeLayout>

+ 102 - 0
app/src/main/res/layout/fragment_bomb.xml

@@ -0,0 +1,102 @@
+
+    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:app="http://schemas.android.com/apk/res-auto"
+        xmlns:tools="http://schemas.android.com/tools"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        tools:context="macampcorp.macamp.activities.fragments.BombFragment">
+
+        <ScrollView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:measureAllChildren="false">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:orientation="vertical">
+
+                <FrameLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content">
+
+                    <ImageView
+                        android:id="@+id/iv_img"
+                        android:layout_width="match_parent"
+                        android:layout_height="200sp"
+                        android:layout_gravity="top" />
+                </FrameLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_weight="1"
+                    android:orientation="vertical">
+
+                    <Space
+                        android:layout_width="match_parent"
+                        android:layout_height="10sp" />
+
+                    <LinearLayout
+                        android:id="@+id/ll_rootIndices"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:orientation="vertical">
+
+                        <LinearLayout
+                            android:id="@+id/ll_textIndices"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:orientation="vertical"></LinearLayout>
+
+                    </LinearLayout>
+
+                    <Space
+                        android:layout_width="match_parent"
+                        android:layout_height="10sp" />
+
+                    <FrameLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent">
+
+                    </FrameLayout>
+
+                    <ScrollView
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent">
+
+                        <LinearLayout
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:orientation="vertical" >
+
+                            <TextView
+                                android:id="@+id/tv_question"
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:layout_weight="5"
+                                android:editable="false"
+                                android:text="Qui a tué le cheval blanc d'Henri IV ?"
+                                android:textSize="18sp" />
+
+                            <Space
+                                android:layout_width="match_parent"
+                                android:layout_height="20sp"
+                                android:layout_weight="5" />
+
+                            <Button
+                                android:id="@+id/btn_ok"
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:layout_gravity="bottom"
+                                android:layout_weight="5"
+                                android:hint="Désamorcer la bombe" />
+                        </LinearLayout>
+                    </ScrollView>
+
+                </LinearLayout>
+
+            </LinearLayout>
+        </ScrollView>
+
+    </FrameLayout>

部分文件因为文件数量过多而无法显示