commit b91d40330787c9ca4eafb956f9737c01f18d2f4a
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Nov 23 14:25:56 2020 +0100

    Progress creating the Tutorial Dialog.

diff --git a/src/main/java/org/distorted/dialogs/RubikDialogTutorialView.java b/src/main/java/org/distorted/dialogs/RubikDialogTutorialView.java
index 921483bd..bbacfabe 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogTutorialView.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogTutorialView.java
@@ -20,21 +20,28 @@
 package org.distorted.dialogs;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.util.AttributeSet;
+import android.util.TypedValue;
 import android.view.View;
+import android.widget.Button;
 import android.widget.FrameLayout;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
 
 import androidx.fragment.app.FragmentActivity;
 
 import org.distorted.main.R;
 import org.distorted.main.RubikActivity;
+import org.distorted.tutorial.TutorialList;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public class RubikDialogTutorialView extends FrameLayout
   {
-  private RubikDialogTutorial mDialog;
-  private int mTab, mPos;
+  private TutorialList mList;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -56,20 +63,59 @@ public class RubikDialogTutorialView extends FrameLayout
     {
     super(act);
 
-    final RubikActivity ract = (RubikActivity)getContext();
+    //int height = (int)(mWidth* RubikActivity.TUTORIAL_ITEM_TEXT);
+    int height = 50;
 
-    mTab = position;
-    mDialog = dialog;
+    RubikActivity ract = (RubikActivity)getContext();
+    Resources res = act.getResources();
+    String packageName = act.getPackageName();
+
+    mList = TutorialList.getObject(position);
 
     View tab = inflate( act, R.layout.dialog_tutorial_tab, null);
+    LinearLayout layout = tab.findViewById(R.id.tabLayout);
 
-    // TODO: on click
+    int numTutorials = mList.getNumTutorials();
 
-    /*
-    RubikActivity ract = (RubikActivity)getContext();
-    if( ract!=null ) ract.switchTutorial("QMzeJobSu1M");
-     */
+    for(int i=0; i<numTutorials; i++)
+      {
+      String coun = mList.getTutorialLanguage(i);
+      String desc = mList.getTutorialDescription(i);
+      String url  = mList.getTutorialURL(i);
+
+      int countryID = res.getIdentifier( coun, "drawable", packageName);
+
+      View row = createRow(ract,countryID,desc,url,height);
+      layout.addView(row);
+      }
 
     addView(tab);
     }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private View createRow(final RubikActivity act, int countryID, final String desc, final String url, int height)
+    {
+    int id = countryID!=0 ? countryID : R.drawable.un;
+
+    View row = inflate( act, R.layout.dialog_tutorial_row, null);
+    Button butt = row.findViewById(R.id.tutorialRowButton);
+
+    butt.setPadding(20,0,0,0);
+
+    butt.setCompoundDrawablesWithIntrinsicBounds(id,0,0,0);
+    butt.setText(desc);
+    butt.setTextSize(TypedValue.COMPLEX_UNIT_PX, 0.7f*height);
+
+    butt.setOnClickListener( new View.OnClickListener()
+      {
+      @Override
+      public void onClick(View v)
+        {
+        act.switchTutorial(url);
+        }
+      });
+
+    return row;
+    }
   }
diff --git a/src/main/java/org/distorted/tutorial/TutorialList.java b/src/main/java/org/distorted/tutorial/TutorialList.java
index 8a4d12c2..48153cc5 100644
--- a/src/main/java/org/distorted/tutorial/TutorialList.java
+++ b/src/main/java/org/distorted/tutorial/TutorialList.java
@@ -27,85 +27,85 @@ public enum TutorialList
 {
   CUBE2 ( ObjectList.CUBE, 2,
           new String[][] {
-                          {"GB","rJlh5p2wAKA","How to Solve a 2x2 Rubik's Cube","Z3"},
+                          {"gb","rJlh5p2wAKA","How to Solve a 2x2 Rubik's Cube","Z3"},
                          }
         ),
 
   CUBE3 ( ObjectList.CUBE, 3,
           new String[][] {
-                          {"GB","-8ohoCKN0Zw","How to Solve a Rubik's Cube","Z3"},
+                          {"gb","-8ohoCKN0Zw","How to Solve a Rubik's Cube","Z3"},
                          }
         ),
 
   CUBE4 ( ObjectList.CUBE, 4,
           new String[][] {
-                          {"GB","RR77Md71Ymc","How to Solve the 4x4 Rubik's Cube","Z3"},
+                          {"gb","RR77Md71Ymc","How to Solve the 4x4 Rubik's Cube","Z3"},
                          }
         ),
 
   CUBE5 ( ObjectList.CUBE, 5,
           new String[][] {
-                          {"GB","zMkNkXHzQts","How to Solve the 5x5 Rubik's Cube","Z3"},
+                          {"gb","zMkNkXHzQts","How to Solve the 5x5 Rubik's Cube","Z3"},
                          }
         ),
 
   PYRA3 ( ObjectList.PYRA, 3,
           new String[][] {
-                          {"GB","xIQtn2qazvg","Pyraminx Layer By Layer","Z3"},
+                          {"gb","xIQtn2qazvg","Pyraminx Layer By Layer","Z3"},
                          }
         ),
 
   PYRA4 ( ObjectList.PYRA, 4,
           new String[][] {
-                          {"GB","tGQDqDcSa6U","How to Solve the Master (4x4) Pyraminx","Z3"},
+                          {"gb","tGQDqDcSa6U","How to Solve the Master (4x4) Pyraminx","Z3"},
                          }
         ),
 
   PYRA5 ( ObjectList.PYRA, 5,
           new String[][] {
-                          {"GB","2nsPEECDdN0","Professor Pyraminx Solve","RedKB"},
+                          {"gb","2nsPEECDdN0","Professor Pyraminx Solve","RedKB"},
                          }
         ),
 
   DIAM2 ( ObjectList.DIAM, 2,
           new String[][] {
-                          {"GB","R2wrbJJ3izM","How to Solve a Skewb Diamond","Dr. Penguin^3"},
+                          {"gb","R2wrbJJ3izM","How to Solve a Skewb Diamond","Dr. Penguin^3"},
                          }
         ),
 
   DINO3 ( ObjectList.DINO, 3,
           new String[][] {
-                          {"GB","puTJZqFBQwo","Dino Skewb Cube Tutorial","Bearded Cubing"},
+                          {"gb","puTJZqFBQwo","Dino Skewb Cube Tutorial","Bearded Cubing"},
                          }
         ),
 
   REDI3 ( ObjectList.REDI, 3,
           new String[][] {
-                          {"GB","Qn7TJED6O-4","How to Solve the MoYu Redi Cube","Z3"},
+                          {"gb","Qn7TJED6O-4","How to Solve the MoYu Redi Cube","Z3"},
                          }
         ),
 
   HELI3 ( ObjectList.HELI, 3,
           new String[][] {
-                          {"GB","-suwJpd_PO8","Helicopter Cube Tutorial","Bearded Cubing"},
+                          {"gb","-suwJpd_PO8","Helicopter Cube Tutorial","Bearded Cubing"},
                          }
         ),
 
   SKEW2 ( ObjectList.SKEW, 2,
           new String[][] {
-                          {"GB","I6132yshkeU","How to Solve the Skewb","Z3"},
+                          {"gb","I6132yshkeU","How to Solve the Skewb","Z3"},
                          }
         ),
 
   SKEW3 ( ObjectList.SKEW, 3,
           new String[][] {
-                          {"GB","Jiuf7zQyPYI","Master Skewb Cube Tutorial","Bearded Cubing"},
+                          {"gb","Jiuf7zQyPYI","Master Skewb Cube Tutorial","Bearded Cubing"},
                          }
         ),
 
   IVY2 ( ObjectList.IVY, 2,
           new String[][] {
-                          {"GB","QMzeJobSu1M","How to Solve the Ivy Cube","Z3"},
+                          {"gb","QMzeJobSu1M","How to Solve the Ivy Cube","Z3"},
                          }
         );
 
@@ -165,6 +165,13 @@ public enum TutorialList
     return -1;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int getNumTutorials()
+    {
+    return mNumTutorials;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int getIconID()
diff --git a/src/main/res/layout/dialog_tutorial_row.xml b/src/main/res/layout/dialog_tutorial_row.xml
new file mode 100644
index 00000000..68a2b770
--- /dev/null
+++ b/src/main/res/layout/dialog_tutorial_row.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Button xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/tutorialRowButton"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingStart="5dp"
+    android:paddingEnd="5dp"
+    android:textSize="20sp"
+    android:maxLines="1"
+    android:gravity="center"/>
+
