commit 0a57000c2337e36135f4e4c04909c033fbd5d4b1
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sun Mar 29 00:18:09 2020 +0000

    Beginnings of support for actual patterns!

diff --git a/src/main/java/org/distorted/uistate/RubikStateAbstract.java b/src/main/java/org/distorted/uistate/RubikStateAbstract.java
index b5c047a7..628e745e 100644
--- a/src/main/java/org/distorted/uistate/RubikStateAbstract.java
+++ b/src/main/java/org/distorted/uistate/RubikStateAbstract.java
@@ -26,8 +26,6 @@ import org.distorted.magic.RubikActivity;
 
 public abstract class RubikStateAbstract
   {
-  static final int BUTTON_ID_BACK  = 1023;
-
   abstract void enterState(RubikActivity act);
   abstract void leaveState(RubikActivity act);
   public abstract void savePreferences(SharedPreferences.Editor editor);
diff --git a/src/main/java/org/distorted/uistate/RubikStateMain.java b/src/main/java/org/distorted/uistate/RubikStateMain.java
index 2cf97818..975f1fb3 100644
--- a/src/main/java/org/distorted/uistate/RubikStateMain.java
+++ b/src/main/java/org/distorted/uistate/RubikStateMain.java
@@ -86,7 +86,6 @@ public class RubikStateMain extends RubikStateAbstract
 
     Button buttonR = new Button(act);
     buttonR.setLayoutParams(params);
-    buttonR.setId(BUTTON_ID_BACK);
     buttonR.setPadding(padding,0,padding,0);
     buttonR.setText(R.string.exit);
 
diff --git a/src/main/java/org/distorted/uistate/RubikStatePattern.java b/src/main/java/org/distorted/uistate/RubikStatePattern.java
index 9b987e0e..fee1e505 100644
--- a/src/main/java/org/distorted/uistate/RubikStatePattern.java
+++ b/src/main/java/org/distorted/uistate/RubikStatePattern.java
@@ -26,6 +26,7 @@ import android.util.DisplayMetrics;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.Button;
+import android.widget.ImageButton;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
@@ -44,6 +45,8 @@ public class RubikStatePattern extends RubikStateAbstract
 
   private TextView mText;
   private Button mBackButton;
+  private ImageButton mPrevButton, mNextButton;
+  private TextView mMovesText;
   private int mSize;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -104,6 +107,16 @@ public class RubikStatePattern extends RubikStateAbstract
     DisplayMetrics metrics = act.getResources().getDisplayMetrics();
     final float scale = metrics.density;
 
+    if( mPrevButton==null ) setupPrevButton(act,scale);
+    if( mNextButton==null ) setupNextButton(act,scale);
+    if( mMovesText ==null ) setupTextView(act,scale);
+
+    LinearLayout layoutLeft = act.findViewById(R.id.mainBarLeft);
+    layoutLeft.removeAllViews();
+    layoutLeft.addView(mPrevButton);
+    layoutLeft.addView(mMovesText);
+    layoutLeft.addView(mNextButton);
+
     if( mBackButton==null ) setupBackButton(act,scale);
 
     LinearLayout layoutRight = act.findViewById(R.id.mainBarRight);
@@ -133,7 +146,6 @@ public class RubikStatePattern extends RubikStateAbstract
     LinearLayout.LayoutParams backParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
     mBackButton = new Button(act);
     mBackButton.setLayoutParams(backParams);
-    mBackButton.setId(BUTTON_ID_BACK);
     mBackButton.setPadding(padding,0,padding,0);
     mBackButton.setText(R.string.back);
 
@@ -161,6 +173,65 @@ public class RubikStatePattern extends RubikStateAbstract
       });
     }
 
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void setupPrevButton(final RubikActivity act, final float scale)
+    {
+    int padding = (int)(3*scale + 0.5f);
+    int length  = (int)(40*scale + 0.5f);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(length,LinearLayout.LayoutParams.MATCH_PARENT);
+    mPrevButton = new ImageButton(act);
+    mPrevButton.setLayoutParams(params);
+    mPrevButton.setPadding(padding,0,padding,0);
+    mPrevButton.setImageResource(R.drawable.left);
+
+    mPrevButton.setOnClickListener( new View.OnClickListener()
+      {
+      @Override
+      public void onClick(View v)
+        {
+        android.util.Log.e("patt", "prev button clicked!");
+        }
+      });
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void setupNextButton(final RubikActivity act, final float scale)
+    {
+    int padding = (int)( 3*scale + 0.5f);
+    int length  = (int)(40*scale + 0.5f);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(length,LinearLayout.LayoutParams.MATCH_PARENT);
+    mNextButton = new ImageButton(act);
+    mNextButton.setLayoutParams(params);
+    mNextButton.setPadding(padding,0,padding,0);
+    mNextButton.setImageResource(R.drawable.right);
+
+    mNextButton.setOnClickListener( new View.OnClickListener()
+      {
+      @Override
+      public void onClick(View v)
+        {
+        android.util.Log.e("patt", "next button clicked!");
+        }
+      });
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void setupTextView(final RubikActivity act, final float scale)
+    {
+    int padding = (int)( 3*scale + 0.5f);
+    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.MATCH_PARENT);
+
+    mMovesText = new TextView(act);
+    mMovesText.setLayoutParams(params);
+    mMovesText.setPadding(padding,0,padding,0);
+
+    mMovesText.setText("aaa");
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void setPattern(int sizeIndex, int category, int pattern)
@@ -177,6 +248,9 @@ public class RubikStatePattern extends RubikStateAbstract
   public void savePreferences(SharedPreferences.Editor editor)
     {
     mBackButton= null;
+    mPrevButton= null;
+    mNextButton= null;
+    mMovesText = null;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/uistate/RubikStatePlay.java b/src/main/java/org/distorted/uistate/RubikStatePlay.java
index cb921ca3..9c11acb3 100644
--- a/src/main/java/org/distorted/uistate/RubikStatePlay.java
+++ b/src/main/java/org/distorted/uistate/RubikStatePlay.java
@@ -138,7 +138,6 @@ public class RubikStatePlay extends RubikStateAbstract
     LinearLayout.LayoutParams backParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
     mBackButton = new Button(act);
     mBackButton.setLayoutParams(backParams);
-    mBackButton.setId(BUTTON_ID_BACK);
     mBackButton.setPadding(padding,0,padding,0);
     mBackButton.setText(R.string.back);
 
diff --git a/src/main/java/org/distorted/uistate/RubikStateSolving.java b/src/main/java/org/distorted/uistate/RubikStateSolving.java
index d9f7e57b..db1468b6 100644
--- a/src/main/java/org/distorted/uistate/RubikStateSolving.java
+++ b/src/main/java/org/distorted/uistate/RubikStateSolving.java
@@ -86,7 +86,6 @@ public class RubikStateSolving extends RubikStateAbstract
 
     mBack = new Button(act);
     mBack.setLayoutParams(params);
-    mBack.setId(BUTTON_ID_BACK);
     mBack.setPadding(padding,0,padding,0);
     mBack.setText(R.string.back);
 
diff --git a/src/main/res/drawable/left.png b/src/main/res/drawable/left.png
new file mode 100644
index 00000000..4d875e02
Binary files /dev/null and b/src/main/res/drawable/left.png differ
diff --git a/src/main/res/drawable/right.png b/src/main/res/drawable/right.png
new file mode 100644
index 00000000..89a6a39c
Binary files /dev/null and b/src/main/res/drawable/right.png differ
