commit 8021e4bb4f69c3884fa46e8a35384ec3d565181d
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Nov 27 01:01:39 2020 +0100

    - new tutorials
    - fix youtube playback

diff --git a/src/main/java/org/distorted/tutorial/TutorialList.java b/src/main/java/org/distorted/tutorial/TutorialList.java
index bf68feaa..3d0bb087 100644
--- a/src/main/java/org/distorted/tutorial/TutorialList.java
+++ b/src/main/java/org/distorted/tutorial/TutorialList.java
@@ -28,12 +28,18 @@ public enum TutorialList
   CUBE2 ( ObjectList.CUBE, 2,
           new String[][] {
                           {"gb","rJlh5p2wAKA","How to Solve a 2x2 Rubik's Cube","Z3"},
+                          {"es","f85wqJTIDlw","Resolver cubo de Rubik 2X2","Cuby"},
+                          {"ru","azC6P3VYFkc","КАК СОБРАТЬ КУБИК РУБИКА 2Х2","Евгений Бондаренко"},
+                          {"fr","qMIB7dYOrHw","Comment résoudre le rubik's cube 2x2","Valentino Cube"},
+                          {"pl","haNWdAYWGsY","Jak ułożyć: 2x2x2 (podstawy)","DżoDżo"},
                          }
         ),
 
   CUBE3 ( ObjectList.CUBE, 3,
           new String[][] {
                           {"gb","-8ohoCKN0Zw","How to Solve a Rubik's Cube","Z3"},
+                          {"es","GyY0OxDk5lI","Resolver cubo de Rubik 3x3","Cuby"},
+                          {"ru","5S2eq81FRzI","КАК СОБРАТЬ КУБИК РУБИКА","Евгений Бондаренко"},
                           {"pl","cBU9Y729nQM","Jak ułożyć kostkę Rubika 3x3x3","DżoDżo"},
                          }
         ),
@@ -41,72 +47,104 @@ public enum TutorialList
   CUBE4 ( ObjectList.CUBE, 4,
           new String[][] {
                           {"gb","RR77Md71Ymc","How to Solve the 4x4 Rubik's Cube","Z3"},
+                          {"es","d_4xk1r9hxU","Resolver cubo de Rubik 4x4","Cuby"},
+                          {"ru","aQNVZlWpqXw","Как собрать кубик рубика 4х4","Евгений Бондаренко"},
+                          {"pl","LiUxNsowXiI","Jak ułożyć kostkę 4x4x4","DżoDżo"},
                          }
         ),
 
   CUBE5 ( ObjectList.CUBE, 5,
           new String[][] {
                           {"gb","zMkNkXHzQts","How to Solve the 5x5 Rubik's Cube","Z3"},
+                          {"es","6uaq-xfFs98","Resolver cubo de Rubik 5x5","Cuby"},
+                          {"pl","ERsPyWOF7mg","Jak ułożyć kostkę 5x5x5","DżoDżo"},
                          }
         ),
 
   PYRA3 ( ObjectList.PYRA, 3,
           new String[][] {
                           {"gb","xIQtn2qazvg","Pyraminx Layer By Layer","Z3"},
+                          {"es","4cJJe9RAzAU","Resolver Pyraminx","Cuby"},
+                          {"ru","F4_bhfWyVRQ","КАК СОБРАТЬ ПИРАМИДКУ","Евгений Бондаренко"},
+                          {"fr","Z2h1YI6jPes","Comment résoudre le Pyraminx","ValentinoCube"},
+                          {"pl","uNpKpJfAa5I","Jak ułożyć: Pyraminx","DżoDżo"},
                          }
         ),
 
   PYRA4 ( ObjectList.PYRA, 4,
           new String[][] {
                           {"gb","tGQDqDcSa6U","How to Solve the Master (4x4) Pyraminx","Z3"},
+                          {"es","74PIPm9-uPg","Resolver MASTER PYRAMINX 4x4","Cuby"},
+                          {"pl","EamwvhmHC7Q","4x4 (Master) Pyraminx PL","MrUk"},
                          }
         ),
 
   PYRA5 ( ObjectList.PYRA, 5,
           new String[][] {
                           {"gb","2nsPEECDdN0","Professor Pyraminx Solve","RedKB"},
+                          {"es","cSDj8OQK3TU","Tutorial del Professor Pyraminx","QBAndo"},
+                          {"ru","gMp1tbDyDWg","Как собрать Professor Pyraminx","RBcuber"},
                          }
         ),
 
   DIAM2 ( ObjectList.DIAM, 2,
           new String[][] {
                           {"gb","R2wrbJJ3izM","How to Solve a Skewb Diamond","Dr. Penguin^3"},
+                          {"ru","k8B6RFcNoGw","Как собрать Skewb Diamond","Алексей Ярыгин"},
+                          {"fr","tqbkgwNcZCE","Comment résoudre le Skewb Diamond","Valentino Cube"},
+                          {"pl","61_Z4TpLMBc","Diamond skewb TUTORIAL PL","MrUk"},
                          }
         ),
 
   DINO3 ( ObjectList.DINO, 3,
           new String[][] {
                           {"gb","puTJZqFBQwo","Dino Skewb Cube Tutorial","Bearded Cubing"},
+                          {"es","6o1Yo5iCxvI","Resolver CUBO DINO","Cuby"},
+                          {"fr","hNkpte7Mesc","Comment résoudre le Dino Cube","Valentino Cube"},
+                          {"pl","o05DYu8UMio","Dino cube TUTORIAL PL","MrUk"},
                          }
         ),
 
   REDI3 ( ObjectList.REDI, 3,
           new String[][] {
                           {"gb","Qn7TJED6O-4","How to Solve the MoYu Redi Cube","Z3"},
+                          {"es","g0M38Aotgac","Resolver REDI CUBE","Cuby"},
+                          {"fr","zw7UZcqqsgA","Comment résoudre le Redi Cube","ValentinoCube"},
+                          {"pl","vxo3lXMsWQI","Jak ułożyć redi cube?","DJ rubiks"},
                          }
         ),
 
   HELI3 ( ObjectList.HELI, 3,
           new String[][] {
                           {"gb","-suwJpd_PO8","Helicopter Cube Tutorial","Bearded Cubing"},
+                          {"es","DWG9n_YyGPA","Resolver HELICOPTER CUBE","Cuby"},
+                          {"pl","zoBZame4gFo","Helicopter cube TUTORIAL PL","MrUk"},
                          }
         ),
 
   SKEW2 ( ObjectList.SKEW, 2,
           new String[][] {
                           {"gb","I6132yshkeU","How to Solve the Skewb","Z3"},
+                          {"es","wxQX3HhPgds","Resolver Skewb (Principiantes)","Cuby"},
+                          {"fr","apIF6QHhVpY","Comment résoudre le Skewb","Valentino Cube"},
+                          {"pl","ofRu1fByNpk","Jak ułożyć: Skewb","DżoDżo"},
                          }
         ),
 
   SKEW3 ( ObjectList.SKEW, 3,
           new String[][] {
                           {"gb","Jiuf7zQyPYI","Master Skewb Cube Tutorial","Bearded Cubing"},
+                          {"es","8TP6p63KQCA","MASTER SKEWB EN ESPAÑOL","jorlozCubes"},
+                          {"pl","Y7l3AYFvDJI","Master skewb TUTORIAL PL","MrUk"},
                          }
         ),
 
   IVY2 ( ObjectList.IVY, 2,
           new String[][] {
                           {"gb","QMzeJobSu1M","How to Solve the Ivy Cube","Z3"},
+                          {"es","2-Gf2cmEJDs","Resolver IVY CUBE","Cuby"},
+                          {"fr","mn7YTnYu3Uc","Comment résoudre le Ivy Cube","ValentinoCube"},
+                          {"pl","8s_0VxNvFA8","Jak ułożyć ivy cube","DubiCube"},
                          }
         );
 
diff --git a/src/main/java/org/distorted/tutorial/TutorialWebView.java b/src/main/java/org/distorted/tutorial/TutorialWebView.java
index a551901c..460c3fa9 100644
--- a/src/main/java/org/distorted/tutorial/TutorialWebView.java
+++ b/src/main/java/org/distorted/tutorial/TutorialWebView.java
@@ -23,6 +23,7 @@ import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.Resources;
 import android.webkit.WebView;
+import android.webkit.WebViewClient;
 
 import org.distorted.main.R;
 
@@ -47,6 +48,15 @@ public class TutorialWebView
       mContext = context;
       mWebView.setBackgroundColor(0);
       mWebView.getSettings().setJavaScriptEnabled(true);
+
+      mWebView.setWebViewClient(new WebViewClient()
+        {
+        @Override
+        public boolean shouldOverrideUrlLoading(WebView view, String url)
+          {
+          return false;
+          }
+        });
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -54,52 +64,11 @@ public class TutorialWebView
     public void load(String url)
       {
       mUrl = url;
-      String data = readFromfile(mContext);
-      data = data.replace("%1", url);
-      mWebView.loadData(data, "text/html", "UTF-8");
-      }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-    public String readFromfile(Context context)
-      {
-      StringBuilder returnString = new StringBuilder();
-      InputStream fIn       = null;
-      InputStreamReader isr = null;
-      BufferedReader input  = null;
-
-      try
-        {
-        Resources res = context.getResources();
-        fIn = res.openRawResource(R.raw.webvideo);
-        isr = new InputStreamReader(fIn);
-        input = new BufferedReader(isr);
-        String line;
 
-        while ((line = input.readLine()) != null)
-          {
-          returnString.append(line);
-          }
-        }
-      catch (Exception e)
-        {
-        e.getMessage();
-        }
-      finally
-        {
-        try
-          {
-          if (isr   != null) isr.close();
-          if (fIn   != null) fIn.close();
-          if (input != null) input.close();
-          }
-        catch (Exception e2)
-          {
-          e2.getMessage();
-          }
-        }
+      String data1 = "<html><body><iframe width=\"100%\" height=\"100%\" src=\"";
+      String data2 = "\" frameborder=\"0\" allowfullscreen></iframe></body></html>";
 
-      return returnString.toString();
+      mWebView.loadData(data1+url+data2, "text/html", "UTF-8");
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/res/raw/webvideo.html b/src/main/res/raw/webvideo.html
deleted file mode 100644
index 42e53197..00000000
--- a/src/main/res/raw/webvideo.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-    <head>
-        <meta charset="utf-8">
-        <style>
-            iframe   { border: 0; position:fixed; width:100%; height:100%; bgcolor="#000000"; }
-            body     { margin: 0; bgcolor="#000000"; }
-        </style>
-    </head>
-    <body>
-        <iframe src="%1" frameborder="0" allowfullscreen></iframe>
-    </body>
-</html>
\ No newline at end of file
