commit 14da31886993fbc13978ed7377c875c343ae1264
Author: leszek <leszek@koltunski.pl>
Date:   Mon Feb 19 01:38:50 2024 +0100

    More support for configuring the stickers.

diff --git a/src/main/java/org/distorted/config/ConfigActivity.java b/src/main/java/org/distorted/config/ConfigActivity.java
index 793cead8..9d85c5e1 100644
--- a/src/main/java/org/distorted/config/ConfigActivity.java
+++ b/src/main/java/org/distorted/config/ConfigActivity.java
@@ -20,7 +20,6 @@ import android.widget.LinearLayout;
 import androidx.appcompat.app.AppCompatActivity;
 
 import org.distorted.dialogs.RubikDialogError;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedLibrary;
 import org.distorted.main.MainActivity;
 import org.distorted.main.R;
@@ -41,8 +40,9 @@ public class ConfigActivity extends AppCompatActivity
     public static final int FLAGS = MainActivity.FLAGS;
 
     private static int mScreenWidth, mScreenHeight;
-    private int mCurrentApiVersion;
     private ConfigScreen mScreen;
+    private ConfigScreenPane mPane;
+    private int mCurrentApiVersion;
     private int mObjectOrdinal;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -154,6 +154,7 @@ public class ConfigActivity extends AppCompatActivity
 
       if( mScreen==null ) mScreen = new ConfigScreen();
       mScreen.onAttachedToWindow(this,mObjectOrdinal);
+      mPane = new ConfigScreenPane(this,mObjectOrdinal);
 
       if( mObjectOrdinal>=0 && mObjectOrdinal< RubikObjectList.getNumObjects() )
         {
@@ -204,6 +205,25 @@ public class ConfigActivity extends AppCompatActivity
       return view.getRenderer();
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void recreateStickers(int borders, int corners)
+      {
+      ObjectControl control = getControl();
+
+      float border_step = ConfigScreenPane.BORDER_STEPS[borders];
+      float corner_step = ConfigScreenPane.CORNER_STEPS[corners];
+
+      control.recreateSticker(border_step,corner_step);
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void resetUI()
+      {
+      mPane.resetUI();
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public int getScreenWidthInPixels()
diff --git a/src/main/java/org/distorted/config/ConfigScreen.java b/src/main/java/org/distorted/config/ConfigScreen.java
index 9efd598d..e4b5ae86 100644
--- a/src/main/java/org/distorted/config/ConfigScreen.java
+++ b/src/main/java/org/distorted/config/ConfigScreen.java
@@ -20,7 +20,6 @@ import org.distorted.main.R;
 public class ConfigScreen
 {
   private TransparentImageButton mBackButton, mResetButton;
-  private ConfigScreenPane mPane;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -84,7 +83,5 @@ public class ConfigScreen
     layout.addView(layoutLeft);
     layout.addView(layoutMid);
     layout.addView(layoutRight);
-
-    mPane = new ConfigScreenPane(act,objectOrdinal);
     }
 }
diff --git a/src/main/java/org/distorted/config/ConfigScreenPane.java b/src/main/java/org/distorted/config/ConfigScreenPane.java
index 913073e0..fed50339 100644
--- a/src/main/java/org/distorted/config/ConfigScreenPane.java
+++ b/src/main/java/org/distorted/config/ConfigScreenPane.java
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// Copyright 2020 Leszek Koltunski                                                               //
+// Copyright 2024 Leszek Koltunski                                                               //
 //                                                                                               //
 // This file is part of Magic Cube.                                                              //
 //                                                                                               //
@@ -9,31 +9,29 @@
 
 package org.distorted.config;
 
-import static org.distorted.objects.RubikObjectCategories.DIFF_IDS;
-import static org.distorted.objects.RubikObjectCategories.DIFF_IMAGES;
-
-import android.graphics.PorterDuff;
 import android.util.TypedValue;
-import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.SeekBar;
 import android.widget.TextView;
 
 import org.distorted.main.R;
-import org.distorted.objectlib.json.JsonReader;
-import org.distorted.objects.RubikObject;
-import org.distorted.objects.RubikObjectList;
-
-import java.io.InputStream;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// TODO
 
 public class ConfigScreenPane
 {
-  private static final int NUM_IDS         = DIFF_IDS.length;
+  public static final int DEFAULT_BORDERS = 2;
+  public static final int DEFAULT_CORNERS = 2;
+
+  public static final float[] BORDER_STEPS = { 0.0f, 0.5f, 1.0f, 1.5f, 2.0f };
+  public static final float[] CORNER_STEPS = { 0.0f, 0.5f, 1.0f, 1.5f, 2.0f };
+
   private static final float PADDING_RATIO = 0.016f;
   private static final float TEXT_RATIO    = 0.025f;
 
+  private final SeekBar mSeekBarBorders, mSeekBarCorners;
+  private int mCurrentBorders, mCurrentCorners;
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   void updatePane(ConfigActivity act, int objectOrdinal)
@@ -41,6 +39,14 @@ public class ConfigScreenPane
 
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  void resetUI()
+    {
+    mSeekBarBorders.setProgress(DEFAULT_BORDERS);
+    mSeekBarCorners.setProgress(DEFAULT_CORNERS);
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   ConfigScreenPane(final ConfigActivity act, int objectOrdinal)
@@ -62,5 +68,50 @@ public class ConfigScreenPane
 
     TextView textStickers = configLayout.findViewById(R.id.configTextStickers);
     textStickers.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
+    TextView textBorder   = configLayout.findViewById(R.id.configTextBorder);
+    textBorder.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
+    TextView textCorner   = configLayout.findViewById(R.id.configTextCorner);
+    textCorner.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
+
+    mSeekBarBorders = configLayout.findViewById(R.id.configSeekBarBorder);
+    mCurrentBorders = mSeekBarBorders.getProgress();
+
+    mSeekBarBorders.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
+      {
+      @Override
+      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
+        {
+        mCurrentBorders = progress;
+        }
+
+      @Override
+      public void onStartTrackingTouch(SeekBar seekBar) {}
+
+      @Override
+      public void onStopTrackingTouch(SeekBar seekBar)
+        {
+        act.recreateStickers(mCurrentBorders,mCurrentCorners);
+        }
+      });
+
+    mSeekBarCorners = configLayout.findViewById(R.id.configSeekBarCorner);
+    mCurrentCorners = mSeekBarCorners.getProgress();
+
+    mSeekBarCorners.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
+      {
+      @Override
+      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
+        {
+        mCurrentCorners = progress;
+        }
+
+      @Override
+      public void onStartTrackingTouch(SeekBar seekBar) {}
+      @Override
+      public void onStopTrackingTouch(SeekBar seekBar)
+        {
+        act.recreateStickers(mCurrentBorders,mCurrentCorners);
+        }
+      });
     }
 }
diff --git a/src/main/java/org/distorted/config/ConfigSurfaceView.java b/src/main/java/org/distorted/config/ConfigSurfaceView.java
index 7783fbed..eb2061e1 100644
--- a/src/main/java/org/distorted/config/ConfigSurfaceView.java
+++ b/src/main/java/org/distorted/config/ConfigSurfaceView.java
@@ -69,7 +69,9 @@ public class ConfigSurfaceView extends GLSurfaceView
 
     void resetObject()
       {
-      // TODO
+      ConfigActivity act = (ConfigActivity)getContext();
+      act.recreateStickers(ConfigScreenPane.DEFAULT_BORDERS,ConfigScreenPane.DEFAULT_CORNERS);
+      act.resetUI();
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/res/layout/config.xml b/src/main/res/layout/config.xml
index 86308441..b269d104 100644
--- a/src/main/res/layout/config.xml
+++ b/src/main/res/layout/config.xml
@@ -33,6 +33,59 @@
             android:textSize="26sp"
             android:text="@string/config_stickers"/>
 
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_margin="5dp"
+            android:paddingLeft="5dp"
+            android:paddingRight="5dp"
+            android:background="@color/grey"
+            android:orientation="horizontal" >
+
+            <TextView
+                android:id="@+id/configTextBorder"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical|start"
+                android:textSize="26sp"
+                android:text="@string/config_border"/>
+
+            <SeekBar
+                android:id="@+id/configSeekBarBorder"
+                style="@style/Widget.AppCompat.SeekBar.Discrete"
+                android:layout_width="119dp"
+                android:layout_height="match_parent"
+                android:gravity="center_vertical|end"
+                android:max="4"
+                android:progress="2" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_margin="5dp"
+            android:paddingLeft="5dp"
+            android:paddingRight="5dp"
+            android:background="@color/grey"
+            android:orientation="horizontal" >
+
+            <TextView
+                android:id="@+id/configTextCorner"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical|start"
+                android:textSize="26sp"
+                android:text="@string/config_corner"/>
+
+            <SeekBar
+                android:id="@+id/configSeekBarCorner"
+                style="@style/Widget.AppCompat.SeekBar.Discrete"
+                android:layout_width="119dp"
+                android:layout_height="match_parent"
+                android:gravity="center_vertical|end"
+                android:max="4"
+                android:progress="2" />
+        </LinearLayout>
     </LinearLayout>
 
     <LinearLayout
diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml
index 1d6394b6..ebaa5cab 100755
--- a/src/main/res/values-de/strings.xml
+++ b/src/main/res/values-de/strings.xml
@@ -86,6 +86,8 @@
     <string name="config_mesh_fast">Schelles</string>
     <string name="config_mesh_nice">Hübsches</string>
     <string name="config_stickers">Aufkleber</string>
+    <string name="config_border">Ränder</string>
+    <string name="config_corner">Ecken</string>
 
     <string name="sort_classic">klassisch</string>
     <string name="sort_shape">form</string>
diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml
index 776bd107..35d1a1be 100755
--- a/src/main/res/values-es/strings.xml
+++ b/src/main/res/values-es/strings.xml
@@ -86,6 +86,8 @@
     <string name="config_mesh_fast">Rápida</string>
     <string name="config_mesh_nice">Bonita</string>
     <string name="config_stickers">Pegatinas</string>
+    <string name="config_border">Bordes</string>
+    <string name="config_corner">Esquinas</string>
 
     <string name="sort_classic">clásico</string>
     <string name="sort_shape">forma</string>
diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml
index c909fbe2..f1c4ec5f 100755
--- a/src/main/res/values-fr/strings.xml
+++ b/src/main/res/values-fr/strings.xml
@@ -86,6 +86,8 @@
     <string name="config_mesh_fast">Rapide</string>
     <string name="config_mesh_nice">Belle</string>
     <string name="config_stickers">Autocollants</string>
+    <string name="config_border">Bordures</string>
+    <string name="config_corner">Coins</string>
 
     <string name="sort_classic">classique</string>
     <string name="sort_shape">forme</string>
diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml
index 595e43ae..605b84b3 100755
--- a/src/main/res/values-ja/strings.xml
+++ b/src/main/res/values-ja/strings.xml
@@ -86,6 +86,8 @@
     <string name="config_mesh_fast">速い</string>
     <string name="config_mesh_nice">良い</string>
     <string name="config_stickers">ステッカー</string>
+    <string name="config_border">枠線</string>
+    <string name="config_corner">角</string>
 
     <string name="sort_classic">古典学</string>
     <string name="sort_shape">形</string>
diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml
index a61b8c2d..827d6a08 100755
--- a/src/main/res/values-ko/strings.xml
+++ b/src/main/res/values-ko/strings.xml
@@ -86,6 +86,8 @@
     <string name="config_mesh_fast">빠른</string>
     <string name="config_mesh_nice">멋진</string>
     <string name="config_stickers">스티커</string>
+    <string name="config_border">테두리</string>
+    <string name="config_corner">모서리</string>
 
     <string name="sort_classic">전통적인</string>
     <string name="sort_shape">모양</string>
diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml
index 68b47b9a..5fba10ff 100644
--- a/src/main/res/values-pl/strings.xml
+++ b/src/main/res/values-pl/strings.xml
@@ -86,6 +86,8 @@
     <string name="config_mesh_fast">Szybka</string>
     <string name="config_mesh_nice">Ładna</string>
     <string name="config_stickers">Naklejki</string>
+    <string name="config_border">Brzegi</string>
+    <string name="config_corner">Rogi</string>
 
     <string name="sort_classic">klasycznie</string>
     <string name="sort_shape">kształt</string>
diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml
index 26f17798..6e0fe9ab 100755
--- a/src/main/res/values-ru/strings.xml
+++ b/src/main/res/values-ru/strings.xml
@@ -86,6 +86,8 @@
     <string name="config_mesh_fast">Быстрая</string>
     <string name="config_mesh_nice">Красивая</string>
     <string name="config_stickers">Наклейки</string>
+    <string name="config_border">Границы</string>
+    <string name="config_corner">Углы</string>
 
     <string name="sort_classic">классик</string>
     <string name="sort_shape">форма</string>
diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml
index e9799d0e..d2f9e3d6 100644
--- a/src/main/res/values-zh-rCN/strings.xml
+++ b/src/main/res/values-zh-rCN/strings.xml
@@ -86,6 +86,8 @@
     <string name="config_mesh_fast">快</string>
     <string name="config_mesh_nice">好的</string>
     <string name="config_stickers">贴纸</string>
+    <string name="config_border">边框</string>
+    <string name="config_corner">角</string>
 
     <string name="sort_classic">經典的</string>
     <string name="sort_shape">形狀</string>
diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml
index 6ab87dc9..55c2061f 100644
--- a/src/main/res/values-zh-rTW/strings.xml
+++ b/src/main/res/values-zh-rTW/strings.xml
@@ -86,6 +86,8 @@
     <string name="config_mesh_fast">快</string>
     <string name="config_mesh_nice">好的</string>
     <string name="config_stickers">貼紙</string>
+    <string name="config_border">邊框</string>
+    <string name="config_corner">角</string>
 
     <string name="sort_classic">经典的</string>
     <string name="sort_shape">形状</string>
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 3015333f..6475b119 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -110,6 +110,8 @@
     <string name="config_mesh_fast">Fast</string>
     <string name="config_mesh_nice">Nice</string>
     <string name="config_stickers">Stickers</string>
+    <string name="config_border">Borders</string>
+    <string name="config_corner">Corners</string>
 
     <string name="sort_classic">classic</string>
     <string name="sort_shape">shape</string>
