commit c3ffcf589c7d1637526b5b337a26bbb63ed0b2db
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Mar 16 16:42:52 2020 +0000

    Progress with saving number of runs, plays, name, verified status.

diff --git a/src/main/java/org/distorted/dialog/RubikDialogScoresPagerAdapter.java b/src/main/java/org/distorted/dialog/RubikDialogScoresPagerAdapter.java
index 1920f5d5..82248c69 100644
--- a/src/main/java/org/distorted/dialog/RubikDialogScoresPagerAdapter.java
+++ b/src/main/java/org/distorted/dialog/RubikDialogScoresPagerAdapter.java
@@ -28,6 +28,7 @@ import android.view.ViewGroup;
 import android.widget.LinearLayout;
 
 import org.distorted.magic.R;
+import org.distorted.scores.RubikScores;
 import org.distorted.scores.RubikScoresDownloader;
 import org.distorted.object.RubikObjectList;
 
@@ -165,11 +166,9 @@ class RubikDialogScoresPagerAdapter extends PagerAdapter implements RubikScoresD
 
     if( allCreated )
       {
+      RubikScores scores = RubikScores.getInstance();
       RubikScoresDownloader downloader = new RubikScoresDownloader();
-      downloader.download( this,
-                           "distorted",  // TODO
-                           mAct.getString(R.string.app_version),
-                           1 );  // TODO
+      downloader.download( this, scores.getName(), mAct.getString(R.string.app_version), scores.getNumRuns() );
       }
 
     return mViews[position];
diff --git a/src/main/java/org/distorted/magic/RubikActivity.java b/src/main/java/org/distorted/magic/RubikActivity.java
index d2bc5263..e2a463db 100644
--- a/src/main/java/org/distorted/magic/RubikActivity.java
+++ b/src/main/java/org/distorted/magic/RubikActivity.java
@@ -31,6 +31,7 @@ import org.distorted.dialog.RubikDialogSettings;
 import org.distorted.effect.BaseEffect;
 import org.distorted.library.main.DistortedLibrary;
 
+import org.distorted.scores.RubikScores;
 import org.distorted.scores.RubikScoresDownloader;
 import org.distorted.object.RubikObjectList;
 import org.distorted.uistate.RubikState;
@@ -41,12 +42,18 @@ import org.distorted.uistate.RubikStatePlay;
 
 public class RubikActivity extends AppCompatActivity implements View.OnClickListener
 {
+    private boolean mJustStarted;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
     @Override
     protected void onCreate(Bundle savedState)
       {
       super.onCreate(savedState);
       setTheme(R.style.CustomActivityThemeNoActionBar);
       setContentView(R.layout.main);
+
+      mJustStarted = true;
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -74,6 +81,12 @@ public class RubikActivity extends AppCompatActivity implements View.OnClickList
       RubikState.setState(this);
       RubikStatePlay play = (RubikStatePlay)RubikState.PLAY.getStateClass();
 
+      if( mJustStarted )
+        {
+        mJustStarted = false;
+        RubikScores.getInstance().incrementNumRuns();
+        }
+
       int object = play.getObject();
       int size   = play.getSize();
       RubikObjectList obj = RubikObjectList.getObject(object);
diff --git a/src/main/java/org/distorted/magic/RubikRenderer.java b/src/main/java/org/distorted/magic/RubikRenderer.java
index 02de69a6..659eb141 100644
--- a/src/main/java/org/distorted/magic/RubikRenderer.java
+++ b/src/main/java/org/distorted/magic/RubikRenderer.java
@@ -29,6 +29,7 @@ import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.message.EffectListener;
 import org.distorted.object.RubikObject;
 import org.distorted.object.RubikObjectList;
+import org.distorted.scores.RubikScores;
 import org.distorted.uistate.RubikState;
 import org.distorted.uistate.RubikStateSolving;
 
@@ -307,6 +308,7 @@ public class RubikRenderer implements GLSurfaceView.Renderer, EffectListener
        mCanRotate      = false;
        mCanUI          = false;
        mIsSolved       = false;
+       RubikScores.getInstance().incrementNumPlays();
        doEffectNow( BaseEffect.Type.SCRAMBLE );
        }
      }
diff --git a/src/main/java/org/distorted/scores/RubikScores.java b/src/main/java/org/distorted/scores/RubikScores.java
index 465e93ee..bd68f6ea 100644
--- a/src/main/java/org/distorted/scores/RubikScores.java
+++ b/src/main/java/org/distorted/scores/RubikScores.java
@@ -27,7 +27,7 @@ import static org.distorted.object.RubikObjectList.NUM_OBJECTS;
 import static org.distorted.uistate.RubikStatePlay.MAX_SCRAMBLE;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// hold my own scores
+// hold my own scores, some other statistics.
 
 public class RubikScores
   {
@@ -35,6 +35,10 @@ public class RubikScores
   private static RubikScores mThis;
 
   private long[][][] mRecords;
+  private String mName;
+  private boolean mNameIsVerified;
+  private int mNumRuns;
+  private int mNumPlays;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -48,6 +52,11 @@ public class RubikScores
           {
           mRecords[i][j][k] = NO_RECORD;
           }
+
+    mName = "";
+    mNameIsVerified = false;
+    mNumPlays= -1;
+    mNumRuns = -1;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -92,8 +101,13 @@ public class RubikScores
           }
         }
 
-      editor.putString("record"+scramble, builder.toString());
+      editor.putString("scores_record"+scramble, builder.toString());
       }
+
+    editor.putString("scores_name"  , mName  );
+    editor.putBoolean("scores_isVerified", mNameIsVerified);
+    editor.putInt("scores_numPlays", mNumPlays);
+    editor.putInt("scores_numRuns" , mNumRuns);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -107,9 +121,7 @@ public class RubikScores
     for(int scramble=0; scramble<MAX_SCRAMBLE; scramble++)
       {
       start = end = 0;
-      recordStr = preferences.getString("record"+scramble, "");
-
-      //android.util.Log.e("solving", scramble+" record string: "+recordStr);
+      recordStr = preferences.getString("scores_record"+scramble, "");
 
       while( end!=-1 )
         {
@@ -149,11 +161,16 @@ public class RubikScores
           }
         }
       }
+
+    mName           = preferences.getString("scores_name"  , "");
+    mNameIsVerified = preferences.getBoolean("scores_isVerified", false);
+    mNumPlays       = preferences.getInt("scores_numPlays", 0);
+    mNumRuns        = preferences.getInt("scores_numRuns" , 0);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public void newRecord(int object, int size, int scramble, long timeTaken)
+  public void setRecord(int object, int size, int scramble, long timeTaken)
     {
     int maxsize = RubikObjectList.getObject(object).getSizes().length;
 
@@ -167,6 +184,34 @@ public class RubikScores
       }
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void incrementNumPlays()
+    {
+    mNumPlays++;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void incrementNumRuns()
+    {
+    mNumRuns++;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void setName(String newName)
+    {
+    mName = newName;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void verifyName()
+    {
+    mNameIsVerified = true;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public long getRecord(int object, int size, int scramble)
@@ -180,4 +225,32 @@ public class RubikScores
 
     return -1;
     }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int getNumPlays()
+    {
+    return mNumPlays;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int getNumRuns()
+    {
+    return mNumRuns;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public String getName()
+    {
+    return mName;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public boolean isVerified()
+    {
+    return mNameIsVerified;
+    }
   }
diff --git a/src/main/java/org/distorted/uistate/RubikStateSolving.java b/src/main/java/org/distorted/uistate/RubikStateSolving.java
index 4bed1ff5..5fc42443 100644
--- a/src/main/java/org/distorted/uistate/RubikStateSolving.java
+++ b/src/main/java/org/distorted/uistate/RubikStateSolving.java
@@ -162,7 +162,7 @@ public class RubikStateSolving extends RubikStateAbstract
       int size    = play.getSize();
       int scramble= play.getPicker();
 
-      mScores.newRecord(object, size, scramble, timeTaken);
+      mScores.setRecord(object, size, scramble, timeTaken);
       return timeTaken;
       }
 
