Browse Source

Internationalisation

gautrais 7 years ago
parent
commit
3341b4ed3d
35 changed files with 533 additions and 221 deletions
  1. 7 8
      app/app.iml
  2. 5 9
      app/src/main/AndroidManifest.xml
  3. 12 18
      app/src/main/assets/game_medium
  4. 9 4
      app/src/main/java/macampcorp/macamp/activities/BombActivity.java
  5. 9 0
      app/src/main/java/macampcorp/macamp/activities/CreditsActivity.java
  6. 73 0
      app/src/main/java/macampcorp/macamp/activities/EndActivity.java
  7. 92 11
      app/src/main/java/macampcorp/macamp/activities/HostActivity.java
  8. 0 66
      app/src/main/java/macampcorp/macamp/activities/LoadingActivity.java
  9. 18 20
      app/src/main/java/macampcorp/macamp/activities/PermissionActivity.java
  10. 19 8
      app/src/main/java/macampcorp/macamp/activities/TutoActivity.java
  11. 6 1
      app/src/main/java/macampcorp/macamp/activities/fragments/ChallengeFragment.java
  12. 1 1
      app/src/main/java/macampcorp/macamp/activities/fragments/QCMFragment.java
  13. 7 12
      app/src/main/java/macampcorp/macamp/activities/fragments/QuestionFragment.java
  14. 1 1
      app/src/main/java/macampcorp/macamp/activities/viewers/ImageViewerActivity.java
  15. 12 1
      app/src/main/java/macampcorp/macamp/game/Bomb.java
  16. 17 11
      app/src/main/java/macampcorp/macamp/game/Event.java
  17. 22 1
      app/src/main/java/macampcorp/macamp/game/Game.java
  18. 11 1
      app/src/main/java/macampcorp/macamp/game/Stage.java
  19. 3 2
      app/src/main/java/macampcorp/macamp/game/scheduler/EventTask.java
  20. 20 6
      app/src/main/java/macampcorp/macamp/game/scheduler/Scheduler.java
  21. 15 1
      app/src/main/java/macampcorp/macamp/game/scheduler/SpecialTask.java
  22. 1 0
      app/src/main/java/macampcorp/macamp/game/scheduler/Task.java
  23. 12 0
      app/src/main/java/macampcorp/macamp/lang/Locale.java
  24. 29 0
      app/src/main/java/macampcorp/macamp/utils/Android.java
  25. 6 4
      app/src/main/res/layout/activity_credits.xml
  26. 74 0
      app/src/main/res/layout/activity_end.xml
  27. 5 5
      app/src/main/res/layout/activity_host.xml
  28. 0 22
      app/src/main/res/layout/activity_loading.xml
  29. 1 1
      app/src/main/res/layout/activity_media.xml
  30. 1 1
      app/src/main/res/layout/activity_permission.xml
  31. 1 1
      app/src/main/res/layout/activity_resource_list.xml
  32. 3 3
      app/src/main/res/layout/activity_tuto.xml
  33. 2 1
      app/src/main/res/layout/fragment_bomb.xml
  34. 1 1
      app/src/main/res/layout/fragment_qrcode.xml
  35. 38 0
      app/src/main/res/values/strings.xml

+ 7 - 8
app/app.iml

@@ -49,13 +49,6 @@
       <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
@@ -63,6 +56,13 @@
       <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
@@ -98,7 +98,6 @@
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-main-apk-res" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-main-apk-res" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifest-checker" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifest-checker" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />

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

@@ -9,11 +9,6 @@
     <uses-feature android:name="android.hardware.camera2.full" />
     <uses-feature android:name="android.hardware.camera2.full" />
     <uses-feature android:name="android.hardware.camera.autofocus" />
     <uses-feature android:name="android.hardware.camera.autofocus" />
 
 
-    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
-    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
-    <uses-permission android:name="android.permission.INTERNET" />
-    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
 
     <application
     <application
         android:allowBackup="true"
         android:allowBackup="true"
@@ -31,8 +26,9 @@
             android:label="@string/title_activity_resource_list"
             android:label="@string/title_activity_resource_list"
             android:screenOrientation="portrait"
             android:screenOrientation="portrait"
             android:theme="@style/AppTheme.NoActionBar.Fullscreen" />
             android:theme="@style/AppTheme.NoActionBar.Fullscreen" />
-        <activity android:name=".PermissionActivity"
-                    android:theme="@style/AppTheme.NoActionBar.Fullscreen" >
+        <activity
+            android:name=".PermissionActivity"
+            android:theme="@style/AppTheme.NoActionBar.Fullscreen">
             <intent-filter>
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <action android:name="android.intent.action.MAIN" />
 
 
@@ -57,9 +53,9 @@
             android:name=".ErrorActivity"
             android:name=".ErrorActivity"
             android:theme="@style/AppTheme.NoActionBar.Fullscreen" />
             android:theme="@style/AppTheme.NoActionBar.Fullscreen" />
         <activity
         <activity
-            android:name=".LoadingActivity"
+            android:name=".TutoActivity"
             android:theme="@style/AppTheme.NoActionBar.Fullscreen" />
             android:theme="@style/AppTheme.NoActionBar.Fullscreen" />
-        <activity android:name=".TutoActivity"
+        <activity android:name=".EndActivity"
             android:theme="@style/AppTheme.NoActionBar.Fullscreen" />
             android:theme="@style/AppTheme.NoActionBar.Fullscreen" />
     </application>
     </application>
 
 

+ 12 - 18
app/src/main/assets/game_medium

@@ -5,24 +5,6 @@
 	"name" : "Intro",
 	"name" : "Intro",
 	"challenges" : [
 	"challenges" : [
 
 
-
-    			{
-    				"type" : "Question",
-    				"name" : "accueilQuestion3",
-    				"resource" : "accueil",
-    				"question" : "Comment est votre blanquette ?\nDemandez donc aux personnes les mieux renseignés de la bibliothèque ET de la MJC. Et au passage, la plaquette de la MJC et le facebook de la bibliothèque pourrait être utile !",
-    				"answer" : "1"
-    			},
-    			{
-    				"type" : "Question",
-    				"name" : "accueilQuestion2",
-    				"resource" : "accueil",
-    				"question" : "Comment est votre blanquette ?\nDemandez donc aux personnes les mieux renseignés de la bibliothèque ET de la MJC. Et au passage, la plaquette de la MJC et le facebook de la bibliothèque pourrait être utile !",
-    				"answer" : "2"
-    			}
-
-
-
 	],
 	],
 	"resources" : ["intro"],
 	"resources" : ["intro"],
 	"event_end" : [ 
 	"event_end" : [ 
@@ -449,6 +431,18 @@
 		],
 		],
 	"resources" : []
 	"resources" : []
 }	],
 }	],
+     "win" : {
+         "name" : "win",
+         "resources" : ["intro"],
+          "challenges" : [],
+         "event_start" : {"method" : "alert", "args" : ["T'as gagné u !"] }
+     },
+      "loose" : {
+          "name" : "loose",
+          "resources" : ["intro"],
+          "challenges" : [],
+          "event_start" : {"method" : "alert", "args" : ["T'as perd u !"] }
+      },
 	"credits" : 
 	"credits" : 
 	{
 	{
 		"text" : "Par Fran\u00e7ois Gautrais !",
 		"text" : "Par Fran\u00e7ois Gautrais !",

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

@@ -11,12 +11,14 @@ import android.view.View;
 import android.widget.TextView;
 import android.widget.TextView;
 import android.widget.Toast;
 import android.widget.Toast;
 
 
+
 import java.util.Timer;
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.TimerTask;
 
 
 import macampcorp.macamp.game.Bomb;
 import macampcorp.macamp.game.Bomb;
 import macampcorp.macamp.game.Game;
 import macampcorp.macamp.game.Game;
 import macampcorp.macamp.game.scheduler.SpecialTask;
 import macampcorp.macamp.game.scheduler.SpecialTask;
+import macampcorp.macamp.lang.Locale;
 
 
 public class BombActivity extends AppCompatActivity {
 public class BombActivity extends AppCompatActivity {
 
 
@@ -47,10 +49,10 @@ public class BombActivity extends AppCompatActivity {
                 mTvCar.setText(mGame.getBomb().getTimeBeforeBoom());
                 mTvCar.setText(mGame.getBomb().getTimeBeforeBoom());
             }else
             }else
             {
             {
+                mTimer.cancel();
                 mTvCar.setText("BOOM !");
                 mTvCar.setText("BOOM !");
                 mGame.getScheduler().clear();
                 mGame.getScheduler().clear();
                 mGame.getScheduler().append(SpecialTask.FINISHED_FAILED);
                 mGame.getScheduler().append(SpecialTask.FINISHED_FAILED);
-                mTimer.cancel();
                 finish();
                 finish();
             }
             }
         }
         }
@@ -121,16 +123,19 @@ public class BombActivity extends AppCompatActivity {
         {
         {
             if(mBomb.disarm(mTyped))
             if(mBomb.disarm(mTyped))
             { //code bon
             { //code bon
+                mTimer.cancel();
+                mGame.getScheduler().clear();
                 mGame.getScheduler().append(SpecialTask.FINISHED_SUCESS);
                 mGame.getScheduler().append(SpecialTask.FINISHED_SUCESS);
                 setResult(0);
                 setResult(0);
                 finish();
                 finish();
-                Toast.makeText(this, "OK !", Toast.LENGTH_LONG).show();
+                Toast.makeText(this, R.string.toast_ok, Toast.LENGTH_LONG).show();
             }else
             }else
             { //code mauvais
             { //code mauvais
-                Toast.makeText(this, "Raté !", Toast.LENGTH_LONG).show();
+                Toast.makeText(this,  R.string.toast_fail, Toast.LENGTH_LONG).show();
+                mGame.getBomb().addTime(-100);
             }
             }
         }else
         }else
-        Toast.makeText(this, "Mauvaise longeur !", Toast.LENGTH_SHORT).show();
+        Toast.makeText(this, R.string.toast_length, Toast.LENGTH_SHORT).show();
     }
     }
 
 
     @Override
     @Override

+ 9 - 0
app/src/main/java/macampcorp/macamp/activities/CreditsActivity.java

@@ -1,5 +1,8 @@
 package macampcorp.macamp.activities;
 package macampcorp.macamp.activities;
 
 
+import android.app.Activity;
+import android.app.IntentService;
+import android.content.Intent;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.os.Bundle;
 import android.text.Html;
 import android.text.Html;
@@ -47,4 +50,10 @@ public class CreditsActivity extends AppCompatActivity {
     }
     }
 
 
     public static final int REQUEST_CODE = 23;
     public static final int REQUEST_CODE = 23;
+
+    public static void start(Activity v)
+    {
+        Intent in = new Intent(v, CreditsActivity.class);
+        v.startActivityForResult(in, REQUEST_CODE);
+    }
 }
 }

+ 73 - 0
app/src/main/java/macampcorp/macamp/activities/EndActivity.java

@@ -0,0 +1,73 @@
+package macampcorp.macamp.activities;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.text.Html;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.utils.Android;
+
+public class EndActivity extends AppCompatActivity {
+    public static final int REQUEST_CODE=1011;
+
+    protected boolean mWon=false;
+    protected TextView mText;
+    protected Button mRetry;
+    protected LinearLayout mRoot;
+
+    protected static final String mTextWin = "Bien joué";
+    protected static final String mTextLoose = "Perdu !";
+
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_end);
+        mWon=getIntent().getBooleanExtra("won", false);
+        mRetry = findViewById(R.id.btn_retry);
+        mRoot = findViewById(R.id.ll_end);
+
+        mText=findViewById(R.id.tv_end);
+        if(mWon)
+        {
+            mText.setText(Html.fromHtml(mTextWin));
+            mRetry.setVisibility(View.GONE);
+        }
+        else
+        {
+            mText.setText(Html.fromHtml(mTextLoose));
+            mRetry.setVisibility(View.VISIBLE);
+        }
+    }
+
+    public void onCredits(View v)
+    {
+        CreditsActivity.start(this);
+    }
+
+    public void onQuit(View v)
+    {
+        Game.erase(this);
+        Game.setGame(null);
+        finish();
+    }
+
+    public void onRetry(View v)
+    {
+        HostActivity.startGame(this, true);
+    }
+
+    public static void start(Activity a, boolean win)
+    {
+        Intent it = new Intent(a, EndActivity.class);
+        it.putExtra("won", win);
+        a.startActivityForResult(it, REQUEST_CODE);
+    }
+}

+ 92 - 11
app/src/main/java/macampcorp/macamp/activities/HostActivity.java

@@ -14,6 +14,7 @@ import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
 import android.widget.Button;
 import android.widget.TextView;
 import android.widget.TextView;
+import android.widget.Toast;
 
 
 import java.util.Timer;
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.TimerTask;
@@ -26,6 +27,7 @@ import macampcorp.macamp.activities.fragments.QuestionFragment;
 import macampcorp.macamp.activities.viewers.ImageViewerActivity;
 import macampcorp.macamp.activities.viewers.ImageViewerActivity;
 import macampcorp.macamp.activities.viewers.MediaViewerAcitvity;
 import macampcorp.macamp.activities.viewers.MediaViewerAcitvity;
 import macampcorp.macamp.activities.viewers.ResourceListActivity;
 import macampcorp.macamp.activities.viewers.ResourceListActivity;
+import macampcorp.macamp.game.Bomb;
 import macampcorp.macamp.game.Game;
 import macampcorp.macamp.game.Game;
 import macampcorp.macamp.game.Resource;
 import macampcorp.macamp.game.Resource;
 import macampcorp.macamp.game.Stage;
 import macampcorp.macamp.game.Stage;
@@ -33,7 +35,9 @@ import macampcorp.macamp.game.challenges.Challenge;
 import macampcorp.macamp.game.Indice;
 import macampcorp.macamp.game.Indice;
 import macampcorp.macamp.game.scheduler.Scheduler;
 import macampcorp.macamp.game.scheduler.Scheduler;
 import macampcorp.macamp.game.scheduler.SpecialTask;
 import macampcorp.macamp.game.scheduler.SpecialTask;
+import macampcorp.macamp.lang.Locale;
 import macampcorp.macamp.utils.AndroidResources;
 import macampcorp.macamp.utils.AndroidResources;
+import macampcorp.macamp.utils.L;
 
 
 
 
 public class HostActivity extends Activity implements ChallengeFragment.OnFragmentInteractionListener {
 public class HostActivity extends Activity implements ChallengeFragment.OnFragmentInteractionListener {
@@ -54,6 +58,11 @@ public class HostActivity extends Activity implements ChallengeFragment.OnFragme
 
 
     private static final int ACTIVITY_RESULT_RESOURCE_VIEWER_SCHEDULER = 2;
     private static final int ACTIVITY_RESULT_RESOURCE_VIEWER_SCHEDULER = 2;
 
 
+    public String _(int x)
+    {
+        return  getResources().getString(x);
+    }
+
     private Timer mTimer;
     private Timer mTimer;
     private Runnable mTimerTick = new Runnable() {
     private Runnable mTimerTick = new Runnable() {
         public void run() {
         public void run() {
@@ -62,9 +71,9 @@ public class HostActivity extends Activity implements ChallengeFragment.OnFragme
                 mUITimeLeft.setText(mGame.getBomb().getTimeBeforeBoom());
                 mUITimeLeft.setText(mGame.getBomb().getTimeBeforeBoom());
             }else
             }else
             {
             {
+                mTimer.cancel();
                 mUITimeLeft.setText("BOOM !");
                 mUITimeLeft.setText("BOOM !");
                 onExplose();
                 onExplose();
-                mTimer.cancel();
             }
             }
         }
         }
     };
     };
@@ -74,6 +83,8 @@ public class HostActivity extends Activity implements ChallengeFragment.OnFragme
         TutoActivity.start(this);
         TutoActivity.start(this);
     }
     }
 
 
+
+
     @Override
     @Override
     protected void onCreate(Bundle savedInstanceState) {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
@@ -241,13 +252,15 @@ public class HostActivity extends Activity implements ChallengeFragment.OnFragme
         {
         {
             Indice x = mCurrentFragment.getChallenge().peakNextIndice();
             Indice x = mCurrentFragment.getChallenge().peakNextIndice();
             int c = Math.round(x.getPenality()*60);
             int c = Math.round(x.getPenality()*60);
-            String out = ""+c+" secondes";
+            String out = ""+c+" "+_(R.string.secondes);
             if(c>=60)
             if(c>=60)
-                out=(c/60)+" minutes et "+(c%60)+" secondes";
+                out=(c/60)+" "+_(R.string.secondes)+" "+
+                        _(R.string.and)+" "+(c%60)+" "+_(R.string.minutes);
 
 
             new AlertDialog.Builder(this)
             new AlertDialog.Builder(this)
-                    .setTitle("Êtes vous sûre ?")
-                    .setMessage("Cet indice vous coutera "+out+", voulez vous continuer ?")
+                    .setTitle(_(R.string.dialog_sure_title))
+                    .setMessage(_(R.string.dialog_sure_pre)+out+
+                                _(R.string.dialog_sure_post))
                     .setNegativeButton(android.R.string.no,  null)
                     .setNegativeButton(android.R.string.no,  null)
                     .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                     .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface arg0, int arg1) {
                         public void onClick(DialogInterface arg0, int arg1) {
@@ -299,18 +312,20 @@ public class HostActivity extends Activity implements ChallengeFragment.OnFragme
 
 
     @Override
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        int x =23;
-        x++;
         switch (requestCode)
         switch (requestCode)
         {
         {
             case CreditsActivity.REQUEST_CODE:
             case CreditsActivity.REQUEST_CODE:
             case MediaViewerAcitvity.REQUEST_CODE:
             case MediaViewerAcitvity.REQUEST_CODE:
             case BombActivity.REQUEST_CODE:
             case BombActivity.REQUEST_CODE:
             case ImageViewerActivity.REQUEST_CODE:
             case ImageViewerActivity.REQUEST_CODE:
+            case TutoActivity.REQUEST_CODE:
                 mGame.getScheduler().schedule(this, mGame);
                 mGame.getScheduler().schedule(this, mGame);
                 save();
                 save();
             break;
             break;
 
 
+            case EndActivity.REQUEST_CODE:
+                finish();
+                break;
 
 
         }
         }
     }
     }
@@ -344,16 +359,40 @@ public class HostActivity extends Activity implements ChallengeFragment.OnFragme
         return mCurrentChallenge;
         return mCurrentChallenge;
     }
     }
 
 
+
+
     public void setFinished()
     public void setFinished()
     {
     {
+        mTimer.cancel();
+        mGame.getScheduler().clear();
+        L.error("__SCHEDULER_DEBUG__", "Win");
+        L.error("__SCHEDULER_DEBUG__","clear:"+ mGame.getScheduler().getTaskListString());
+        mGame.getScheduler().append(mGame.getOnWin().getStartEvent());
+        L.error("__SCHEDULER_DEBUG__", "start:"+mGame.getScheduler().getTaskListString()+ " -> "+mGame.getOnLoose().getStartEvent().size());
+        mGame.getScheduler().append(mGame.getOnWin().getResources());
+        L.error("__SCHEDULER_DEBUG__", "res:"+mGame.getScheduler().getTaskListString());
+        mGame.getScheduler().append(mGame.getOnWin().getEndEvent());
+        L.error("__SCHEDULER_DEBUG__", "end:"+mGame.getScheduler().getTaskListString());
+        mGame.getScheduler().append(SpecialTask.END_SUCCESS);
+        mGame.getScheduler().schedule(this, mGame);
 
 
     }
     }
 
 
     public void setFailed()
     public void setFailed()
     {
     {
-        Intent intent = new Intent(this, CreditsActivity.class);
-        startActivity(intent);
-        finish();
+        mTimer.cancel();
+        mGame.getScheduler().clear();
+        L.error("__SCHEDULER_DEBUG__", "Loose");
+        L.error("__SCHEDULER_DEBUG__","clear:"+ mGame.getScheduler().getTaskListString());
+        mGame.getScheduler().append(mGame.getOnLoose().getStartEvent());
+        L.error("__SCHEDULER_DEBUG__", "start:"+mGame.getScheduler().getTaskListString()+ " -> "+mGame.getOnLoose().getStartEvent().size());
+        mGame.getScheduler().append(mGame.getOnLoose().getResources());
+        L.error("__SCHEDULER_DEBUG__", "res:"+mGame.getScheduler().getTaskListString());
+        mGame.getScheduler().append(mGame.getOnLoose().getEndEvent());
+        L.error("__SCHEDULER_DEBUG__", "end:"+mGame.getScheduler().getTaskListString());
+        mGame.getScheduler().append(SpecialTask.END_FAILED);
+        mGame.getScheduler().schedule(this, mGame);
+
     }
     }
 
 
     public Activity getActivity() {
     public Activity getActivity() {
@@ -369,7 +408,6 @@ public class HostActivity extends Activity implements ChallengeFragment.OnFragme
         mGame.save(this);
         mGame.save(this);
     }
     }
 
 
-
     @Override
     @Override
     public void onBackPressed()
     public void onBackPressed()
     {
     {
@@ -384,4 +422,47 @@ public class HostActivity extends Activity implements ChallengeFragment.OnFragme
     }
     }
 
 
 
 
+
+    public static void startGame(Activity a)
+    {
+        startGame(a,false, "game_medium");
+    }
+
+    public static void startGame(Activity a, boolean b)
+    {
+        startGame(a,b, "game_medium");
+    }
+
+
+    public static void startGame(Activity a, String b)
+    {
+        startGame(a,false, b);
+    }
+
+
+    public static void startGame(Activity a, boolean erase, String file)
+    {
+        if(erase)
+        {
+            Game.erase(a);
+            Game.setGame(null);
+        }
+
+        if(Game.game()==null)
+        {
+            Game g = Game.load(a);
+            if (g != null ) {
+                Game.setGame(g);
+                Toast.makeText(a, R.string.game_loading, Toast.LENGTH_SHORT).show();
+            } else {
+                Game game = new Game(file, a);
+                Game.setGame(game);
+                Toast.makeText(a, R.string.game_new, Toast.LENGTH_SHORT).show();
+            }
+        }
+
+        Intent intent = new Intent(a, HostActivity.class);
+        a.startActivityForResult(intent, HostActivity.REQUEST_CODE);
+    }
+
 }
 }

+ 0 - 66
app/src/main/java/macampcorp/macamp/activities/LoadingActivity.java

@@ -1,66 +0,0 @@
-package macampcorp.macamp.activities;
-
-import android.content.Intent;
-import android.support.v7.app.AppCompatActivity;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-import android.widget.Toast;
-
-import macampcorp.macamp.game.Game;
-
-
-
-public class LoadingActivity extends AppCompatActivity {
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data){
-        if(requestCode==HostActivity.REQUEST_CODE)
-            finish();
-        else
-            startGame();
-    }
-
-
-    public void startGame()
-    {
-        Intent intent = new Intent(this, HostActivity.class);
-        startActivityForResult(intent, HostActivity.REQUEST_CODE);
-        finish();
-    }
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_loading);
-
-        //TutoActivity.start(this);
-        //return;
-
-        Game game=null;
-        if(Game.game()==null)
-        {
-            Game g = Game.load(this);
-            if (g != null ) {
-                game = g;
-                Game.setGame(game);
-                Toast.makeText(this, "Chargement", Toast.LENGTH_SHORT).show();
-            } else {
-                game = new Game("game_medium", this);
-                Game.setGame(game);
-                Toast.makeText(this, "Nouveau Jeu", Toast.LENGTH_SHORT).show();
-            }
-        }
-
-        startGame();
-
-
-    }
-
-    public void go(View v)
-    {
-        startGame();
-    }
-
-
-}

+ 18 - 20
app/src/main/java/macampcorp/macamp/activities/PermissionActivity.java

@@ -3,9 +3,12 @@ package macampcorp.macamp.activities;
 import android.Manifest;
 import android.Manifest;
 import android.app.Activity;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.AlertDialog;
+import android.app.KeyguardManager;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager;
+import android.os.PowerManager;
 import android.support.v4.app.ActivityCompat;
 import android.support.v4.app.ActivityCompat;
 import android.support.v4.content.ContextCompat;
 import android.support.v4.content.ContextCompat;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.app.AppCompatActivity;
@@ -18,10 +21,11 @@ import java.util.ArrayList;
 
 
 import macampcorp.macamp.game.Game;
 import macampcorp.macamp.game.Game;
 import macampcorp.macamp.game.Resource;
 import macampcorp.macamp.game.Resource;
+import macampcorp.macamp.lang.Locale;
 import macampcorp.macamp.utils.files.FileManager;
 import macampcorp.macamp.utils.files.FileManager;
 
 
 public class PermissionActivity extends AppCompatActivity {
 public class PermissionActivity extends AppCompatActivity {
-    private int m_nPerm=3;
+    private int m_nPerm=1;
     static final int PERM_FINE_LOCATION=1337;
     static final int PERM_FINE_LOCATION=1337;
     static final int ALL_PERMISSIONS=1337;
     static final int ALL_PERMISSIONS=1337;
     static final int PERM_CAMERA=1338;
     static final int PERM_CAMERA=1338;
@@ -56,21 +60,12 @@ public class PermissionActivity extends AppCompatActivity {
         }
         }
 
 
 
 
-        if (ContextCompat.checkSelfPermission(this,   Manifest.permission.ACCESS_FINE_LOCATION)
-                != PackageManager.PERMISSION_GRANTED) {
-            al.add(Manifest.permission.ACCESS_FINE_LOCATION);
-        } else m_nPerm--;
-
         if (ContextCompat.checkSelfPermission(this,   Manifest.permission.CAMERA)
         if (ContextCompat.checkSelfPermission(this,   Manifest.permission.CAMERA)
                 != PackageManager.PERMISSION_GRANTED) {
                 != PackageManager.PERMISSION_GRANTED) {
             al.add(Manifest.permission.CAMERA);
             al.add(Manifest.permission.CAMERA);
         } else m_nPerm--;
         } else m_nPerm--;
 
 
 
 
-        if (ContextCompat.checkSelfPermission(this,   Manifest.permission.ACCESS_COARSE_LOCATION)
-                != PackageManager.PERMISSION_GRANTED) {
-            al.add(Manifest.permission.ACCESS_COARSE_LOCATION);
-        } else m_nPerm--;
         try {
         try {
             if (al.size() > 0)
             if (al.size() > 0)
                 ActivityCompat.requestPermissions(this, al.toArray(new String[m_nPerm]), ALL_PERMISSIONS);
                 ActivityCompat.requestPermissions(this, al.toArray(new String[m_nPerm]), ALL_PERMISSIONS);
@@ -78,6 +73,10 @@ public class PermissionActivity extends AppCompatActivity {
             e.printStackTrace();
             e.printStackTrace();
         }
         }
 
 
+
+
+
+
     }
     }
 
 
 
 
@@ -86,20 +85,18 @@ public class PermissionActivity extends AppCompatActivity {
         final Activity t = this;
         final Activity t = this;
         AlertDialog.Builder builder = new AlertDialog.Builder(this);
         AlertDialog.Builder builder = new AlertDialog.Builder(this);
         // Add the buttons
         // Add the buttons
-                builder.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
+                builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
                     public void onClick(DialogInterface dialog, int id) {
                     public void onClick(DialogInterface dialog, int id) {
-                        startGame();
+                        startGame(false);
                     }
                     }
                 });
                 });
-                builder.setNegativeButton("Non", new DialogInterface.OnClickListener() {
+                builder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
                     public void onClick(DialogInterface dialog, int id) {
                     public void onClick(DialogInterface dialog, int id) {
-                        Game.erase(t);
-                        Game.setGame(null);
-                        startGame();
+                        startGame(true);
                     }
                     }
                 });
                 });
         // Set other dialog properties
         // Set other dialog properties
-        builder.setMessage("Voulez vous continuer la partie ?");
+        builder.setMessage(R.string.toast_continue);
 
 
         // Create the AlertDialog
         // Create the AlertDialog
         AlertDialog dialog = builder.create();
         AlertDialog dialog = builder.create();
@@ -126,15 +123,16 @@ public class PermissionActivity extends AppCompatActivity {
 
 
     }
     }
 
 
-    public void startGame()
+    public void startGame(boolean  erase)
     {
     {
-        Intent intent = new Intent(this, LoadingActivity.class);
-        startActivity(intent);
+        HostActivity.startGame(this, erase);
         finish();
         finish();
     }
     }
 
 
     public void onUnderstood(View v)
     public void onUnderstood(View v)
     {
     {
+
+
         if(m_nPerm==0)
         if(m_nPerm==0)
         {
         {
             askForReset();
             askForReset();

+ 19 - 8
app/src/main/java/macampcorp/macamp/activities/TutoActivity.java

@@ -1,5 +1,6 @@
 package macampcorp.macamp.activities;
 package macampcorp.macamp.activities;
 
 
+import android.app.Activity;
 import android.content.Context;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.Intent;
@@ -18,16 +19,20 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.ArrayList;
 
 
+import macampcorp.macamp.game.Game;
+import macampcorp.macamp.lang.Locale;
 import macampcorp.macamp.utils.files.FileManager;
 import macampcorp.macamp.utils.files.FileManager;
 
 
 
 
 public class TutoActivity extends AppCompatActivity  {
 public class TutoActivity extends AppCompatActivity  {
+    public static final int REQUEST_CODE=1010;
     protected ImageView mImage;
     protected ImageView mImage;
     protected ArrayList<String> mPathList = new ArrayList<>();
     protected ArrayList<String> mPathList = new ArrayList<>();
     protected int mCurrent=0;
     protected int mCurrent=0;
 
 
     protected Button mNext;
     protected Button mNext;
     protected Button mPrev;
     protected Button mPrev;
+    protected long mTime=0;
 
 
     @Override
     @Override
     protected void onCreate(Bundle savedInstanceState)  {
     protected void onCreate(Bundle savedInstanceState)  {
@@ -56,23 +61,29 @@ public class TutoActivity extends AppCompatActivity  {
         update();
         update();
     }
     }
 
 
+    public void exit()
+    {
+        setResult(0);
+        finish();
+    }
+
     public void onPass(View v)
     public void onPass(View v)
     {
     {
         if(mCurrent<mPathList.size()-1)
         if(mCurrent<mPathList.size()-1)
         { //Si ce n''est pas le dernier on demande confirmation
         { //Si ce n''est pas le dernier on demande confirmation
             new AlertDialog.Builder(this)
             new AlertDialog.Builder(this)
-                    .setTitle("Passer le tutorial ?")
-                    .setMessage("Êtes-vous variment sûre de vouloir passer le tutorial. Il est important pour bien comprendre le fonctionnement du jeu... ")
+                    .setTitle(R.string.tuto_pass_title)
+                    .setMessage(R.string.no)
                     .setNegativeButton(android.R.string.no,  null)
                     .setNegativeButton(android.R.string.no,  null)
                     .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                     .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface arg0, int arg1) {
                         public void onClick(DialogInterface arg0, int arg1) {
-                           finish();
+                            exit();
                         }
                         }
                     }).create().show();
                     }).create().show();
 
 
         }
         }
         else
         else
-            finish();
+            exit();
 
 
     }
     }
 
 
@@ -91,8 +102,8 @@ public class TutoActivity extends AppCompatActivity  {
         if(mCurrent==0) mPrev.setVisibility(View.INVISIBLE);
         if(mCurrent==0) mPrev.setVisibility(View.INVISIBLE);
         else mPrev.setVisibility(View.VISIBLE);
         else mPrev.setVisibility(View.VISIBLE);
 
 
-        if(mCurrent==mPathList.size()-1) mNext.setText("OK");
-        else mNext.setText("Suivant");
+        if(mCurrent==mPathList.size()-1) mNext.setText(R.string.btn_ok);
+        else mNext.setText(R.string.btn_next);
     }
     }
 
 
     @Override
     @Override
@@ -126,9 +137,9 @@ public class TutoActivity extends AppCompatActivity  {
         }
         }
     }
     }
 
 
-    public static void start(Context c)
+    public static void start(Activity c)
     {
     {
         Intent it = new Intent(c, TutoActivity.class);
         Intent it = new Intent(c, TutoActivity.class);
-        c.startActivity(it);
+        c.startActivityForResult(it, REQUEST_CODE);
     }
     }
 }
 }

+ 6 - 1
app/src/main/java/macampcorp/macamp/activities/fragments/ChallengeFragment.java

@@ -25,6 +25,7 @@ import macampcorp.macamp.game.Resource;
 import macampcorp.macamp.game.ResourceManager;
 import macampcorp.macamp.game.ResourceManager;
 import macampcorp.macamp.game.challenges.Challenge;
 import macampcorp.macamp.game.challenges.Challenge;
 import macampcorp.macamp.game.Indice;
 import macampcorp.macamp.game.Indice;
+import macampcorp.macamp.lang.Locale;
 import macampcorp.macamp.utils.files.FileManager;
 import macampcorp.macamp.utils.files.FileManager;
 import uk.co.senab.photoview.PhotoViewAttacher;
 import uk.co.senab.photoview.PhotoViewAttacher;
 
 
@@ -33,6 +34,10 @@ public abstract class ChallengeFragment extends Fragment{
     protected abstract  void onResetUi();
     protected abstract  void onResetUi();
 
 
 
 
+    public String _(int x)
+    {
+        return  getResources().getString(x);
+    }
 
 
     protected LinearLayout  mUITextIndices;
     protected LinearLayout  mUITextIndices;
     protected LinearLayout  mUIGlobalIndice;
     protected LinearLayout  mUIGlobalIndice;
@@ -112,7 +117,7 @@ public abstract class ChallengeFragment extends Fragment{
         TextView tv = new TextView(getActivity());
         TextView tv = new TextView(getActivity());
         tv.setTextColor(0xff70e030);
         tv.setTextColor(0xff70e030);
         tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
         tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
-        tv.setText("  Indice "+(indInd+1)+" : "+ind.getText());
+        tv.setText(_(R.string.indice_prefix)+ " "+ind.getText());
         tv.setTypeface(null, Typeface.BOLD);
         tv.setTypeface(null, Typeface.BOLD);
         return  tv;
         return  tv;
     }
     }

+ 1 - 1
app/src/main/java/macampcorp/macamp/activities/fragments/QCMFragment.java

@@ -71,7 +71,7 @@ public class QCMFragment extends ChallengeFragment {
 
 
         if(x<0 || x>=mChoices.size())
         if(x<0 || x>=mChoices.size())
         {
         {
-            Toast.makeText(getActivity(), "Vous devez sélectionner une réponse ! ", Toast.LENGTH_SHORT).show();
+            Toast.makeText(getActivity(), R.string.no_response, Toast.LENGTH_SHORT).show();
             return Challenge.NO_RESPONSE;
             return Challenge.NO_RESPONSE;
         }else
         }else
         {
         {

+ 7 - 12
app/src/main/java/macampcorp/macamp/activities/fragments/QuestionFragment.java

@@ -20,6 +20,7 @@ import macampcorp.macamp.activities.HostActivity;
 import macampcorp.macamp.activities.R;
 import macampcorp.macamp.activities.R;
 import macampcorp.macamp.game.challenges.Challenge;
 import macampcorp.macamp.game.challenges.Challenge;
 import macampcorp.macamp.game.challenges.Question;
 import macampcorp.macamp.game.challenges.Question;
+import macampcorp.macamp.utils.Android;
 
 
 /**
 /**
  * A simple {@link Fragment} subclass.
  * A simple {@link Fragment} subclass.
@@ -76,7 +77,7 @@ public class QuestionFragment extends ChallengeFragment  {
         String resp = mUIResponse.getText().toString();
         String resp = mUIResponse.getText().toString();
         if(resp.length()==0)
         if(resp.length()==0)
         {
         {
-            Toast.makeText(getActivity(), "Vous devez entrer une réponse ...", Toast.LENGTH_SHORT).show();
+            Toast.makeText(getActivity(), R.string.no_respons_q, Toast.LENGTH_SHORT).show();
             return Challenge.NO_RESPONSE;
             return Challenge.NO_RESPONSE;
         }
         }
         if(mQuestion.checkAnswer(resp))
         if(mQuestion.checkAnswer(resp))
@@ -96,14 +97,14 @@ public class QuestionFragment extends ChallengeFragment  {
 
 
     public void onChallengeFailed()
     public void onChallengeFailed()
     {
     {
-        hideKeyboard(getActivity());
+        Android.hideKeyboard(getActivity());
     }
     }
 
 
 
 
     @Override
     @Override
     protected void onInitChallenge(Challenge c) {
     protected void onInitChallenge(Challenge c) {
         super.onInitChallenge(c);
         super.onInitChallenge(c);
-        hideKeyboard(getActivity());
+        Android.hideKeyboard(getActivity());
 
 
 
 
 
 
@@ -121,17 +122,11 @@ public class QuestionFragment extends ChallengeFragment  {
     @Override
     @Override
     protected void onResetUi() {
     protected void onResetUi() {
         mUIResponse.setText("");
         mUIResponse.setText("");
-        mUIResponse.setHint("Entrer votre réponse");
+        mUIResponse.setHint(R.string.hint_resp);
         getHostActivity().setVisibilityView(R.id.btn_valid, View.VISIBLE);
         getHostActivity().setVisibilityView(R.id.btn_valid, View.VISIBLE);
-        hideKeyboard(getActivity());
+        Android.hideKeyboard(getActivity());
 
 
     }
     }
 
 
-    public static void hideKeyboard(Activity activity) {
-        View view = activity.findViewById(android.R.id.content);
-        if (view != null) {
-            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
-            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
-        }
-    }
+
 }
 }

+ 1 - 1
app/src/main/java/macampcorp/macamp/activities/viewers/ImageViewerActivity.java

@@ -49,7 +49,7 @@ public class ImageViewerActivity extends AppCompatActivity {
             if(mResource.isImage())
             if(mResource.isImage())
             {
             {
                 Bitmap bmp=null;
                 Bitmap bmp=null;
-                Toast.makeText(this, "Chargement de '"+mResource.getName()+"'", Toast.LENGTH_SHORT).show();
+
                 try {
                 try {
                     bmp = FileManager.openImage(this, mResource.getFile());
                     bmp = FileManager.openImage(this, mResource.getFile());
                 } catch (Exception e) {
                 } catch (Exception e) {

+ 12 - 1
app/src/main/java/macampcorp/macamp/game/Bomb.java

@@ -16,6 +16,7 @@ public class Bomb implements Serializable{
     public  static final int BOMB_UNARMED=0;
     public  static final int BOMB_UNARMED=0;
     public  static final int BOMB_ARMED=1;
     public  static final int BOMB_ARMED=1;
     public  static final int BOMB_DISARMED=2;
     public  static final int BOMB_DISARMED=2;
+    public  static final int BOMB_EXPLOSED=3;
 
 
     protected long      mDeadLine;
     protected long      mDeadLine;
     protected String    mPassword;
     protected String    mPassword;
@@ -134,8 +135,18 @@ public class Bomb implements Serializable{
         mDeadLine=(s*1000+Calendar.getInstance().getTimeInMillis());
         mDeadLine=(s*1000+Calendar.getInstance().getTimeInMillis());
     }
     }
 
 
+    protected void explose()
+    {
+        mStatus=BOMB_EXPLOSED;
+    }
+
     public boolean hasExplosed()
     public boolean hasExplosed()
     {
     {
-        return mDeadLine < Calendar.getInstance().getTimeInMillis();
+        if(getSecondsBeforeBoom()<0)
+            explose();
+
+        return mStatus!=BOMB_DISARMED && mDeadLine < Calendar.getInstance().getTimeInMillis();
     }
     }
+
+    public int getStatus() { return mStatus; }
 }
 }

+ 17 - 11
app/src/main/java/macampcorp/macamp/game/Event.java

@@ -57,7 +57,7 @@ public class Event implements Serializable {
 
 
     public class EventReturn  implements  Serializable{
     public class EventReturn  implements  Serializable{
         public int code;
         public int code;
-
+        public boolean wait=false;
         public String message;
         public String message;
         public ArrayList<Object> args;
         public ArrayList<Object> args;
 
 
@@ -69,6 +69,7 @@ public class Event implements Serializable {
 
 
         public EventReturn set(int c, String m) { code=c; message=m; return this;}
         public EventReturn set(int c, String m) { code=c; message=m; return this;}
         public EventReturn addArg(Object e) {args.add(e); return this;}
         public EventReturn addArg(Object e) {args.add(e); return this;}
+        public void setWait(){ wait=true;}
 
 
         public boolean isError() { return code!=0;}
         public boolean isError() { return code!=0;}
     }
     }
@@ -93,7 +94,7 @@ public class Event implements Serializable {
     public EventReturn exec(HostActivity a, Game g)
     public EventReturn exec(HostActivity a, Game g)
     {
     {
         Class[] paramType = new Class[2];
         Class[] paramType = new Class[2];
-        paramType[0] = Activity.class;
+        paramType[0] = HostActivity.class;
         paramType[1] = Game.class;
         paramType[1] = Game.class;
         EventReturn ev =  new EventReturn();
         EventReturn ev =  new EventReturn();
 
 
@@ -122,7 +123,7 @@ public class Event implements Serializable {
 
 
 
 
 
 
-    public EventReturn armBomb(Activity a, Game g)
+    public EventReturn armBomb(HostActivity a, Game g)
     {
     {
         g.getBomb().arm();
         g.getBomb().arm();
         return new EventReturn(0,"OK");
         return new EventReturn(0,"OK");
@@ -134,7 +135,7 @@ public class Event implements Serializable {
      * $0 : temps en minutes
      * $0 : temps en minutes
      * @return OK
      * @return OK
      */
      */
-    public EventReturn setTimerTo(Activity a, Game g)
+    public EventReturn setTimerTo(HostActivity a, Game g)
     {
     {
         long time = g.getBomb().getSecondsBeforeBoom();
         long time = g.getBomb().getSecondsBeforeBoom();
         long seuil = argAsInt(0, 15) * 60;
         long seuil = argAsInt(0, 15) * 60;
@@ -144,41 +145,46 @@ public class Event implements Serializable {
     }
     }
 
 
 
 
-    public EventReturn print(Activity a, Game g)
+    public EventReturn print(HostActivity a, Game g)
     {
     {
         Toast.makeText(a, argAsString(0, "Error"), Toast.LENGTH_LONG).show();
         Toast.makeText(a, argAsString(0, "Error"), Toast.LENGTH_LONG).show();
         L.info(  argAsString(0, "Error"));
         L.info(  argAsString(0, "Error"));
         return new EventReturn(0,"OK");
         return new EventReturn(0,"OK");
     }
     }
 
 
-    public EventReturn alert(final Activity a, final Game g)
+    public EventReturn alert(final HostActivity a, final Game g)
     {
     {
         String message = argAsString(0, "");
         String message = argAsString(0, "");
         AlertDialog.Builder builder = new AlertDialog.Builder(a);
         AlertDialog.Builder builder = new AlertDialog.Builder(a);
         // Add the buttons
         // Add the buttons
         builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
         builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int id) {
             public void onClick(DialogInterface dialog, int id) {
-                g.getScheduler().schedule(HostActivity.cast(a), g);
+                g.getScheduler().schedule(a, g);
             }
             }
         });
         });
         builder.setNegativeButton("Non", new DialogInterface.OnClickListener() {
         builder.setNegativeButton("Non", new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int id) {
             public void onClick(DialogInterface dialog, int id) {
-                g.getScheduler().schedule(HostActivity.cast(a), g);
+                g.getScheduler().schedule(a, g);
             }
             }
         });
         });
         // Set other dialog properties
         // Set other dialog properties
         builder.setMessage(message);
         builder.setMessage(message);
+        L.debug(message);
 
 
         // Create the AlertDialog
         // Create the AlertDialog
         AlertDialog dialog = builder.create();
         AlertDialog dialog = builder.create();
         dialog.show();
         dialog.show();
-        return new EventReturn(0,"OK");
+        EventReturn ev = new EventReturn(0, "OK");
+        ev.setWait();
+        return ev;
     }
     }
 
 
-    public EventReturn tuto(Activity a, Game g)
+    public EventReturn tuto(HostActivity a, Game g)
     {
     {
         TutoActivity.start(a);
         TutoActivity.start(a);
-        return new EventReturn(0, "OK");
+        EventReturn ev = new EventReturn(0, "OK");
+        ev.setWait();
+        return ev;
     }
     }
 
 
     public String getMethod() {
     public String getMethod() {

+ 22 - 1
app/src/main/java/macampcorp/macamp/game/Game.java

@@ -36,6 +36,9 @@ public class Game  implements Serializable {
     protected Stage            mCurrentStage=null;
     protected Stage            mCurrentStage=null;
     protected int              mCurrentStageIndex=-1;
     protected int              mCurrentStageIndex=-1;
 
 
+    protected Stage            mOnWin=null;
+    protected Stage            mOnLoose=null;
+
     protected Inventaire       mInventaire;
     protected Inventaire       mInventaire;
     protected Scheduler        mSched = new Scheduler();
     protected Scheduler        mSched = new Scheduler();
 
 
@@ -82,6 +85,23 @@ public class Game  implements Serializable {
             throw new BadGameConfigException("Bad parameter 'password'");
             throw new BadGameConfigException("Bad parameter 'password'");
         }
         }
 
 
+        try {
+            JSONObject arr = root.getJSONObject("win");
+            mOnWin=new Stage(this, arr, act);
+        } catch (JSONException e) {
+            L.warn("Le champs 'win' n'est pas renseigné");
+            throw  new BadGameConfigException("Le champs 'win' n'est pas renseigné");
+        }
+
+
+        try {
+            JSONObject arr = root.getJSONObject("loose");
+            mOnLoose=new Stage(this, arr, act);
+        } catch (JSONException e) {
+            L.warn("Le champs 'loose' n'est pas renseigné");
+            throw  new BadGameConfigException("Le champs 'win' n'est pas renseigné");
+        }
+
         mCurrentStageIndex=-1;
         mCurrentStageIndex=-1;
         if(mStages.size()>0)
         if(mStages.size()>0)
             mCurrentStage=mStages.get(0);
             mCurrentStage=mStages.get(0);
@@ -93,7 +113,8 @@ public class Game  implements Serializable {
         return mCurrentStage;
         return mCurrentStage;
     }
     }
 
 
-
+    public Stage getOnWin() { return mOnWin; }
+    public Stage getOnLoose() {return mOnLoose; }
 
 
     public Challenge getCurrentChallenge()
     public Challenge getCurrentChallenge()
     {
     {

+ 11 - 1
app/src/main/java/macampcorp/macamp/game/Stage.java

@@ -32,7 +32,16 @@ public class Stage  implements Serializable {
         try {
         try {
             mName = root.getString("name");
             mName = root.getString("name");
             mDone = false;
             mDone = false;
-            JSONArray chall = root.getJSONArray("challenges");
+
+        } catch (JSONException e) {
+            e.printStackTrace();
+            throw new RuntimeException(e.getMessage() + " Name:"+mName);
+        }
+
+
+        try {
+            JSONArray chall = null;
+            chall = root.getJSONArray("challenges");
             for(int i=0; i<chall.length(); i++)
             for(int i=0; i<chall.length(); i++)
             {
             {
                 JSONObject obj = chall.getJSONObject(i);
                 JSONObject obj = chall.getJSONObject(i);
@@ -45,6 +54,7 @@ public class Stage  implements Serializable {
             throw new RuntimeException(e.getMessage() + " Name:"+mName);
             throw new RuntimeException(e.getMessage() + " Name:"+mName);
         }
         }
 
 
+
         try{
         try{
 
 
             JSONArray chall = root.getJSONArray("resources");
             JSONArray chall = root.getJSONArray("resources");

+ 3 - 2
app/src/main/java/macampcorp/macamp/game/scheduler/EventTask.java

@@ -21,9 +21,10 @@ public class EventTask extends Task {
 
 
     @Override
     @Override
     public int exec(Scheduler s, HostActivity cd, Game g) {
     public int exec(Scheduler s, HostActivity cd, Game g) {
-        mEvent.exec(cd, g);
+        Event.EventReturn ev = mEvent.exec(cd, g);
         cd.save();
         cd.save();
-        return s.schedule(cd, g);
+        if(!ev.wait) return s.schedule(cd, g);
+        return Task.TASK_EVENT;
     }
     }
 
 
     public Event getEvent() {
     public Event getEvent() {

+ 20 - 6
app/src/main/java/macampcorp/macamp/game/scheduler/Scheduler.java

@@ -11,6 +11,7 @@ import macampcorp.macamp.game.Event;
 import macampcorp.macamp.game.Game;
 import macampcorp.macamp.game.Game;
 import macampcorp.macamp.game.Resource;
 import macampcorp.macamp.game.Resource;
 import macampcorp.macamp.game.challenges.Challenge;
 import macampcorp.macamp.game.challenges.Challenge;
+import macampcorp.macamp.utils.L;
 
 
 
 
 public class Scheduler implements Serializable {
 public class Scheduler implements Serializable {
@@ -62,6 +63,8 @@ public class Scheduler implements Serializable {
                 append(new ResourceTask((Resource)c.get(i)));
                 append(new ResourceTask((Resource)c.get(i)));
             else if(c.get(i) instanceof Event)
             else if(c.get(i) instanceof Event)
                 append(new EventTask((Event)c.get(i)));
                 append(new EventTask((Event)c.get(i)));
+            else if(c.get(i) instanceof Challenge)
+                append(new ChallengeTask((Challenge)c.get(i)));
     }
     }
 
 
     public void prepend(Resource r) { prepend(new ResourceTask(r));}
     public void prepend(Resource r) { prepend(new ResourceTask(r));}
@@ -74,21 +77,18 @@ public class Scheduler implements Serializable {
     {
     {
         Task t = mStart;
         Task t = mStart;
         mLastTask=t;
         mLastTask=t;
+        L.error("___SCHEDULER_DEBUG___", "Executing task : " + getTaskListString());
+        if(t==null) return Task.TASK_NONE;
         if(t!=null)
         if(t!=null)
         {
         {
             mStart=mStart.next();
             mStart=mStart.next();
             mLastTask.mNext=null;
             mLastTask.mNext=null;
-            //Log.e("___SCHEDULER_DEBUG___", "Executing task : "+t.toString());
             return t.exec(this, cd, g);
             return t.exec(this, cd, g);
         }else  mLastTask.mNext=null;
         }else  mLastTask.mNext=null;
         return Task.TASK_NONE;
         return Task.TASK_NONE;
     }
     }
 
 
-    public void scheduleFromActivity(Activity cd, Game g)
-    {
-        Intent it = new Intent(cd, HostActivity.class);
-        cd.startActivity(it);
-    }
+
 
 
     public ArrayList<Task> getTaskList()
     public ArrayList<Task> getTaskList()
     {
     {
@@ -98,6 +98,20 @@ public class Scheduler implements Serializable {
         return at;
         return at;
     }
     }
 
 
+    public String getTaskListString()
+    {
+        String x = "[ ";
+        Task t = mStart;
+        while(t!=null)
+        {
+            x+=t.toString();
+            t=t.mNext;
+        }
+        x+=" ]";
+        if(mLastTask!=null) x+=" : "+mLastTask.toString();
+        return x;
+    }
+
     public Task getLastTask() {
     public Task getLastTask() {
         return mLastTask;
         return mLastTask;
     }
     }

+ 15 - 1
app/src/main/java/macampcorp/macamp/game/scheduler/SpecialTask.java

@@ -4,6 +4,7 @@ import android.app.Activity;
 import android.content.Intent;
 import android.content.Intent;
 
 
 import macampcorp.macamp.activities.BombActivity;
 import macampcorp.macamp.activities.BombActivity;
+import macampcorp.macamp.activities.EndActivity;
 import macampcorp.macamp.activities.HostActivity;
 import macampcorp.macamp.activities.HostActivity;
 import macampcorp.macamp.game.Game;
 import macampcorp.macamp.game.Game;
 
 
@@ -11,6 +12,8 @@ public class SpecialTask extends Task {
 
 
     public static final int FINISHED_SUCESS=1;
     public static final int FINISHED_SUCESS=1;
     public static final int FINISHED_FAILED=2;
     public static final int FINISHED_FAILED=2;
+    public static final int END_SUCCESS=4;
+    public static final int END_FAILED=5;
     public static final int BOMB=3;
     public static final int BOMB=3;
 
 
     protected int mState;
     protected int mState;
@@ -21,7 +24,8 @@ public class SpecialTask extends Task {
     }
     }
 
 
     private static final String[] gStrings={"STATE_NONE", "STATE_FINISHED_SUCESS",
     private static final String[] gStrings={"STATE_NONE", "STATE_FINISHED_SUCESS",
-                                              "STATE_FINISHED_FAILED", "STATE_FINISHED_FAILED" };
+                                              "STATE_FINISHED_FAILED", "STATE_FINISHED_FAILED",
+                                                "STATE_END_SUCCESS", "STATE_END_FAILED" };
 
 
     public String toString()
     public String toString()
     {
     {
@@ -45,6 +49,16 @@ public class SpecialTask extends Task {
                 act.startActivityForResult(in, BombActivity.REQUEST_CODE);
                 act.startActivityForResult(in, BombActivity.REQUEST_CODE);
             }
             }
             break;
             break;
+
+            case END_FAILED:
+                EndActivity.start(cd, false);
+                //cd.finish();
+                break;
+
+            case END_SUCCESS:
+                EndActivity.start(cd, true);
+                //cd.finish();
+                break;
         }
         }
         return TASK_SPECIAL;
         return TASK_SPECIAL;
     }
     }

+ 1 - 0
app/src/main/java/macampcorp/macamp/game/scheduler/Task.java

@@ -11,6 +11,7 @@ public abstract class Task implements Serializable {
     public final static int TASK_EVENT=2;
     public final static int TASK_EVENT=2;
     public final static int TASK_RESOURCE=3;
     public final static int TASK_RESOURCE=3;
     public final static int TASK_SPECIAL=4;
     public final static int TASK_SPECIAL=4;
+    public final static int TASK_WAIT=5;
 
 
     protected int mType;
     protected int mType;
     protected Task mNext=null;
     protected Task mNext=null;

+ 12 - 0
app/src/main/java/macampcorp/macamp/lang/Locale.java

@@ -0,0 +1,12 @@
+package macampcorp.macamp.lang;
+
+import android.content.res.Resources;
+
+import macampcorp.macamp.activities.R;
+
+public class Locale {
+    public static String _(int x)
+    {
+        return Resources.getSystem().getString(x);
+    }
+}

+ 29 - 0
app/src/main/java/macampcorp/macamp/utils/Android.java

@@ -0,0 +1,29 @@
+package macampcorp.macamp.utils;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Build;
+import android.text.InputType;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+
+public class Android {
+    public static void hideKeyboard(Activity activity) {
+        View view = activity.findViewById(android.R.id.content);
+        if (view != null) {
+            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
+            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+        }
+    }
+
+    public static void disableSoftInputFromAppearing(EditText editText) {
+        if (Build.VERSION.SDK_INT >= 11) {
+            editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
+            editText.setTextIsSelectable(true);
+        } else {
+            editText.setRawInputType(InputType.TYPE_NULL);
+        }
+        editText.setFocusable(true);
+    }
+}

+ 6 - 4
app/src/main/res/layout/activity_credits.xml

@@ -12,9 +12,11 @@
         android:layout_width="87dp"
         android:layout_width="87dp"
         android:layout_height="96dp"
         android:layout_height="96dp"
         android:layout_marginBottom="8dp"
         android:layout_marginBottom="8dp"
+        android:layout_marginLeft="8dp"
+        android:layout_marginStart="8dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:srcCompat="@drawable/mj"
-        tools:layout_editor_absoluteX="8dp" />
+        app:layout_constraintStart_toStartOf="parent"
+        app:srcCompat="@drawable/mj" />
 
 
     <ImageView
     <ImageView
         android:id="@+id/imageView3"
         android:id="@+id/imageView3"
@@ -28,7 +30,7 @@
         app:srcCompat="@drawable/angouleme" />
         app:srcCompat="@drawable/angouleme" />
 
 
     <ScrollView
     <ScrollView
-        android:layout_width="344dp"
+        android:layout_width="0dp"
         android:layout_height="0dp"
         android:layout_height="0dp"
         android:layout_marginBottom="8dp"
         android:layout_marginBottom="8dp"
         android:layout_marginEnd="8dp"
         android:layout_marginEnd="8dp"
@@ -44,7 +46,7 @@
         <LinearLayout
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_height="wrap_content"
-            android:orientation="vertical" >
+            android:orientation="vertical">
 
 
             <TextView
             <TextView
                 android:id="@+id/tv_credits"
                 android:id="@+id/tv_credits"

+ 74 - 0
app/src/main/res/layout/activity_end.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout 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.EndActivity">
+
+    <LinearLayout
+        android:id="@+id/linearLayout2"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_marginBottom="8dp"
+        android:layout_marginEnd="8dp"
+        android:layout_marginLeft="8dp"
+        android:layout_marginRight="8dp"
+        android:layout_marginStart="8dp"
+        android:gravity="bottom"
+        android:orientation="vertical"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent">
+
+        <Button
+            android:id="@+id/button16"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:onClick="onCredits"
+            android:text="@string/btn_credits" />
+
+        <Button
+            android:id="@+id/btn_retry"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:onClick="onRetry"
+            android:text="@string/btn_retry" />
+
+        <Button
+            android:id="@+id/button14"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:onClick="onQuit"
+            android:text="@string/btn_quit" />
+    </LinearLayout>
+
+    <ScrollView
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_marginBottom="8dp"
+        android:layout_marginEnd="8dp"
+        android:layout_marginLeft="8dp"
+        android:layout_marginRight="8dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="8dp"
+        app:layout_constraintBottom_toTopOf="@+id/linearLayout2"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <LinearLayout
+            android:id="@+id/ll_end"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/tv_end"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="TextView" />
+        </LinearLayout>
+    </ScrollView>
+
+</android.support.constraint.ConstraintLayout>

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

@@ -39,7 +39,7 @@
                     android:layout_marginRight="8dp"
                     android:layout_marginRight="8dp"
                     android:layout_marginStart="8dp"
                     android:layout_marginStart="8dp"
                     android:layout_marginTop="2dp"
                     android:layout_marginTop="2dp"
-                    android:text="Code de la bombe"
+                    android:text="@string/btn_code"
                     android:textSize="14sp"
                     android:textSize="14sp"
                     app:layout_constraintEnd_toStartOf="@+id/imageButton2"
                     app:layout_constraintEnd_toStartOf="@+id/imageButton2"
                     app:layout_constraintStart_toEndOf="@+id/divider4"
                     app:layout_constraintStart_toEndOf="@+id/divider4"
@@ -52,7 +52,7 @@
                     android:layout_marginLeft="8dp"
                     android:layout_marginLeft="8dp"
                     android:layout_marginStart="8dp"
                     android:layout_marginStart="8dp"
                     android:layout_marginTop="2dp"
                     android:layout_marginTop="2dp"
-                    android:text="Temps restant:"
+                    android:text="@string/lbl_time"
                     android:textSize="14sp"
                     android:textSize="14sp"
                     app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintTop_toTopOf="parent" />
                     app:layout_constraintTop_toTopOf="parent" />
@@ -161,7 +161,7 @@
                 android:layout_weight="1"
                 android:layout_weight="1"
                 android:gravity="center"
                 android:gravity="center"
                 android:onClick="onClickIndice"
                 android:onClick="onClickIndice"
-                android:text="Indice"
+                android:text="@string/btn_indice"
                 android:textSize="12sp" />
                 android:textSize="12sp" />
 
 
             <Button
             <Button
@@ -171,7 +171,7 @@
                 android:layout_weight="1"
                 android:layout_weight="1"
                 android:gravity="center"
                 android:gravity="center"
                 android:onClick="onClickVideos"
                 android:onClick="onClickVideos"
-                android:text="Vidéos"
+                android:text="@string/btn_journal"
                 android:textSize="12sp" />
                 android:textSize="12sp" />
 
 
             <Button
             <Button
@@ -181,7 +181,7 @@
                 android:layout_weight="1"
                 android:layout_weight="1"
                 android:gravity="center"
                 android:gravity="center"
                 android:onClick="onClickValid"
                 android:onClick="onClickValid"
-                android:text="Valider"
+                android:text="@string/btn_valid"
                 android:textSize="12sp" />
                 android:textSize="12sp" />
         </LinearLayout>
         </LinearLayout>
 
 

+ 0 - 22
app/src/main/res/layout/activity_loading.xml

@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout 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.LoadingActivity">
-
-    <Button
-        android:id="@+id/button10"
-        android:layout_width="314dp"
-        android:layout_height="118dp"
-        android:layout_marginEnd="8dp"
-        android:layout_marginLeft="8dp"
-        android:layout_marginRight="8dp"
-        android:layout_marginStart="8dp"
-        android:onClick="go"
-        android:text="lancer"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        tools:layout_editor_absoluteY="-14dp" />
-</android.support.constraint.ConstraintLayout>

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

@@ -19,7 +19,7 @@
         android:layout_alignParentRight="true"
         android:layout_alignParentRight="true"
         android:layout_alignParentStart="true"
         android:layout_alignParentStart="true"
         android:onClick="onOk"
         android:onClick="onOk"
-        android:text="Ok"
+        android:text="@string/btn_ok"
         android:textStyle="bold" />
         android:textStyle="bold" />
 
 
     <ImageButton
     <ImageButton

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

@@ -19,7 +19,7 @@
         android:layout_alignParentRight="true"
         android:layout_alignParentRight="true"
         android:layout_alignParentStart="true"
         android:layout_alignParentStart="true"
         android:onClick="onUnderstood"
         android:onClick="onUnderstood"
-        android:text="J&apos;ai compris"
+        android:text="@string/btn_understood"
         android:textColor="#000000"
         android:textColor="#000000"
         android:textSize="25dp"
         android:textSize="25dp"
         android:textStyle="bold" />
         android:textStyle="bold" />

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

@@ -17,7 +17,7 @@
         android:layout_width="match_parent"
         android:layout_width="match_parent"
         android:layout_height="70dp"
         android:layout_height="70dp"
         android:layout_gravity="center_horizontal"
         android:layout_gravity="center_horizontal"
-        android:text="Journal"
+        android:text="@string/lbl_journal"
         android:textSize="30dp"
         android:textSize="30dp"
         android:textStyle="bold" />
         android:textStyle="bold" />
 
 

+ 3 - 3
app/src/main/res/layout/activity_tuto.xml

@@ -22,7 +22,7 @@
         android:layout_width="wrap_content"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
         android:onClick="onNext"
         android:onClick="onNext"
-        android:text="Suivant"
+        android:text="@string/btn_next"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent" />
         app:layout_constraintEnd_toEndOf="parent" />
 
 
@@ -31,7 +31,7 @@
         android:layout_width="wrap_content"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
         android:onClick="onPrev"
         android:onClick="onPrev"
-        android:text="Précédant"
+        android:text="@string/btn_prev"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintStart_toStartOf="parent" />
         app:layout_constraintStart_toStartOf="parent" />
 
 
@@ -44,7 +44,7 @@
         android:layout_marginRight="8dp"
         android:layout_marginRight="8dp"
         android:layout_marginStart="8dp"
         android:layout_marginStart="8dp"
         android:onClick="onPass"
         android:onClick="onPass"
-        android:text="Passer"
+        android:text="@string/btn_pass"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toStartOf="@+id/btn_next"
         app:layout_constraintEnd_toStartOf="@+id/btn_next"
         app:layout_constraintStart_toEndOf="@+id/btn_prev" />
         app:layout_constraintStart_toEndOf="@+id/btn_prev" />

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

@@ -90,7 +90,8 @@
                                 android:layout_height="wrap_content"
                                 android:layout_height="wrap_content"
                                 android:layout_gravity="bottom"
                                 android:layout_gravity="bottom"
                                 android:layout_weight="5"
                                 android:layout_weight="5"
-                                android:hint="Désamorcer la bombe" />
+                                android:hint="Désamorcer la bombe"
+                                android:text="@string/btn_defuse" />
                         </LinearLayout>
                         </LinearLayout>
                     </ScrollView>
                     </ScrollView>
 
 

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

@@ -88,7 +88,7 @@
             android:id="@+id/btn_scan"
             android:id="@+id/btn_scan"
             android:layout_width="match_parent"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_height="wrap_content"
-            android:text="Scanner le code" />
+            android:text="@string/btn_scan" />
     </LinearLayout>
     </LinearLayout>
 
 
 </LinearLayout>
 </LinearLayout>

+ 38 - 0
app/src/main/res/values/strings.xml

@@ -96,4 +96,42 @@
     <string name="hello_blank_fragment">Hello blank fragment</string>
     <string name="hello_blank_fragment">Hello blank fragment</string>
     <string name="title_activity_test_video">TestVideoActivity</string>
     <string name="title_activity_test_video">TestVideoActivity</string>
     <string name="title_activity_bomb">BombActivity</string>
     <string name="title_activity_bomb">BombActivity</string>
+    <string name="btn_credits">Crédits</string>
+    <string name="btn_retry">Réessayer</string>
+    <string name="btn_quit">Quitter</string>
+    <string name="lbl_time">Temps restant:</string>
+    <string name="btn_code">Code de la bombe:</string>
+    <string name="btn_indice">Indice</string>
+    <string name="btn_journal">Journal</string>
+    <string name="btn_valid">Valider</string>
+    <string name="btn_ok">Ok</string>
+    <string name="btn_understood">J\'ai compris</string>
+    <string name="lbl_journal">Journal</string>
+    <string name="btn_prev">Précédant</string>
+    <string name="btn_pass">Passer</string>
+    <string name="btn_next">Suivant</string>
+    <string name="btn_defuse">Désamorcer</string>
+    <string name="btn_scan">Scanner le code</string>
+    <string name="toast_ok">Bombe désamorcée !</string>
+    <string name="toast_fail">Mauvais code !</string>
+    <string name="toast_length">Code incomplet</string>
+    <string name="game_loading">Chargment...</string>
+    <string name="game_new">Nouveau jeu</string>
+    <string name="yes">Oui</string>
+    <string name="no">Non</string>
+    <string name="toast_continue">Voulez-vous continuer la partie ?</string>
+    <string name="tuto_pass_title">Passer le tutorial</string>
+    <string name="tuto_pass">Êtes-vous variment sûre de vouloir passer le tutorial. Il est important pour bien comprendre le fonctionnement du jeu...</string>
+    <string name="indice_prefix">Indice :</string>
+    <string name="no_response">Vous devez sélectionner une réponse</string>
+    <string name="no_respons_q">Vous devez entrer une réponse</string>
+    <string name="hint_resp">Entrez votre réponse</string>
+    <string name="minutes">minutes</string>
+    <string name="secondes">secondes</string>
+    <string name="and">et</string>
+    <string name="dialog_sure_title">Êtes-vous sûre ?</string>
+    <string name="dialog_sure_pre">Cet indice vous coutera</string>
+    <string name="dialog_sure_post">, voulez vous continuer ?</string>
+
+
 </resources>
 </resources>