commit 5690134dfb5ad2d4057494b8d4d3c2b69d261feb
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Jun 1 12:45:45 2021 +0200

    Dynamic App: add support for the new SpeedMode inside Dynamics. (so far only first two SpeedModes - smooth and segment_constant - are supported )

diff --git a/src/main/java/org/distorted/examples/dynamic/DynamicActivity.java b/src/main/java/org/distorted/examples/dynamic/DynamicActivity.java
index 63dcc91..3105ea7 100644
--- a/src/main/java/org/distorted/examples/dynamic/DynamicActivity.java
+++ b/src/main/java/org/distorted/examples/dynamic/DynamicActivity.java
@@ -43,7 +43,7 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
     {
     private TextView textDuration, textCount, textNoise, textConvexity;
     private int mNoise0,mNoise1,mNoise2,mNoise3;
-    private int mDim, mMode;
+    private int mDim, mMode, mSpeed;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -60,8 +60,9 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
       textNoise    = findViewById(R.id.dynamicTextNoise);
 
       mNoise0=mNoise1=mNoise2=mNoise3=0;
-      mDim = DynamicSurfaceView.DIM_2D;
-      mMode= Dynamic1D.MODE_LOOP;
+      mDim  = DynamicSurfaceView.DIM_2D;
+      mMode = Dynamic.MODE_LOOP;
+      mSpeed= Dynamic.SPEED_MODE_SMOOTH;
 
       SeekBar barD = findViewById(R.id.dynamicSeekDuration);
       barD.setOnSeekBarChangeListener(this);
@@ -78,7 +79,7 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
 
       Spinner dimensionSpinner  = findViewById(R.id.dynamicSpinnerDimension);
       dimensionSpinner.setOnItemSelectedListener(this);
-      String[] dimensions = { "Dimension 1" , "Dimension 2" , "Dimension 3 (XY)" , "Dimension 3 (XZ)" , "Dimension 4 (XY)" , "Dimension 4 (ZW)" , "Quaternion XY" , "Quaternion ZW" };
+      String[] dimensions = { "Dim 1" , "Dim 2" , "Dim 3 (XY)" , "Dim 3 (XZ)" , "Dim 4 (XY)" , "Dim 4 (ZW)" , "Quat XY" , "Quat ZW" };
 
       ArrayAdapter<String> adapterDim = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, dimensions );
       adapterDim.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
@@ -87,13 +88,22 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
 
       Spinner modeSpinner  = findViewById(R.id.dynamicSpinnerMode);
       modeSpinner.setOnItemSelectedListener(this);
-      String[] modes = { "MODE_LOOP" , "MODE_PATH" , "MODE_JUMP" };
+      String[] modes = { "LOOP" , "PATH" , "JUMP" };
 
       ArrayAdapter<String> adapterMode = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, modes );
       adapterMode.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       modeSpinner.setAdapter(adapterMode);
       modeSpinner.setSelection(0);
 
+      Spinner speedSpinner  = findViewById(R.id.dynamicSpinnerSpeedMode);
+      speedSpinner.setOnItemSelectedListener(this);
+      String[] speeds = { "SMOOTH" , "SEGM_CONST" , "GLOB_CONST" };
+
+      ArrayAdapter<String> adapterSpeed = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, speeds );
+      adapterSpeed.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+      speedSpinner.setAdapter(adapterSpeed);
+      speedSpinner.setSelection(0);
+
       if( savedState==null )
         {
         barD.setProgress(50);
@@ -199,6 +209,15 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
       mMode = mode;
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void setSpeedMode(int mode)
+      {
+      DynamicSurfaceView view = findViewById(R.id.dynamicSurfaceView);
+      view.setSpeedMode(mode);
+      mSpeed = mode;
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public void Start(View v)
@@ -247,6 +266,15 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
           case 2: setMode(Dynamic.MODE_JUMP); break;
           }
         }
+      else if( spinnerID == R.id.dynamicSpinnerSpeedMode )
+        {
+        switch(pos)
+          {
+          case 0: setSpeedMode(Dynamic.SPEED_MODE_SMOOTH           ); break;
+          case 1: setSpeedMode(Dynamic.SPEED_MODE_SEGMENT_CONSTANT ); break;
+          case 2: setSpeedMode(Dynamic.SPEED_MODE_GLOBALLY_CONSTANT); break;
+          }
+        }
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -256,8 +284,9 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
       {
       super.onSaveInstanceState(savedInstanceState);
 
-      savedInstanceState.putInt("dim" , mDim );
-      savedInstanceState.putInt("mode", mMode);
+      savedInstanceState.putInt("dim"  , mDim  );
+      savedInstanceState.putInt("mode" , mMode );
+      savedInstanceState.putInt("speed", mSpeed);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -267,11 +296,13 @@ public class DynamicActivity extends Activity implements OnSeekBarChangeListener
       {
       super.onRestoreInstanceState(savedInstanceState);
 
-      mDim = savedInstanceState.getInt("dim");
-      mMode= savedInstanceState.getInt("mode");
+      mDim  = savedInstanceState.getInt("dim");
+      mMode = savedInstanceState.getInt("mode");
+      mSpeed= savedInstanceState.getInt("speed");
 
       setDim(mDim);
       setMode(mMode);
+      setSpeedMode(mSpeed);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/examples/dynamic/DynamicSurfaceView.java b/src/main/java/org/distorted/examples/dynamic/DynamicSurfaceView.java
index b4b57f6..efc5a6e 100644
--- a/src/main/java/org/distorted/examples/dynamic/DynamicSurfaceView.java
+++ b/src/main/java/org/distorted/examples/dynamic/DynamicSurfaceView.java
@@ -196,6 +196,17 @@ public class DynamicSurfaceView extends GLSurfaceView
       diQu.setMode(mode);
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void setSpeedMode(int mode)
+      {
+      di1D.setSpeedMode(mode);
+      di2D.setSpeedMode(mode);
+      di3D.setSpeedMode(mode);
+      di4D.setSpeedMode(mode);
+      diQu.setSpeedMode(mode); // not implemented yet!
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public void setDuration(int duration)
diff --git a/src/main/res/layout/dynamicslayout.xml b/src/main/res/layout/dynamicslayout.xml
index 7be8d98..7844e85 100644
--- a/src/main/res/layout/dynamicslayout.xml
+++ b/src/main/res/layout/dynamicslayout.xml
@@ -23,6 +23,12 @@
             android:layout_weight="0.5"
             android:id="@+id/dynamicSpinnerMode"/>
 
+        <Spinner
+            android:layout_width="0dp"
+            android:layout_height="50dp"
+            android:layout_weight="0.5"
+            android:id="@+id/dynamicSpinnerSpeedMode"/>
+
     </LinearLayout>
 
     <LinearLayout
