commit 0effd5a907309e3b04d49b697ea66642bb42a98b
Author: leszek <leszek@koltunski.pl>
Date:   Sun Aug 20 12:30:48 2023 +0200

    Remove the generic 'MINOR' object and extras versions from JsonWriter, and replace them with per-ObjectType values. This was the reason why objects which had their 'minor' (really: version) updated to '1' in the server then never updated the jsons with locally stored versions.

diff --git a/src/main/java/org/distorted/external/RubikNetwork.java b/src/main/java/org/distorted/external/RubikNetwork.java
index 1f5eb70c..b54c9c4e 100644
--- a/src/main/java/org/distorted/external/RubikNetwork.java
+++ b/src/main/java/org/distorted/external/RubikNetwork.java
@@ -465,8 +465,8 @@ public class RubikNetwork
     String country = scores.getCountry();
     String renderer = DistortedLibrary.getDriverRenderer();
     String version  = DistortedLibrary.getDriverVersion();
-    int objectAPI   = JsonWriter.VERSION_OBJECT_MAJOR;
-    int tutorialAPI = JsonWriter.VERSION_EXTRAS_MAJOR;
+    int objectAPI   = JsonWriter.VERSION_OBJECT_APP;
+    int tutorialAPI = JsonWriter.VERSION_EXTRAS_APP;
     int numStars    = scores.getNumStars();
 
     renderer = URLencode(renderer);
diff --git a/src/main/java/org/distorted/external/RubikUpdates.java b/src/main/java/org/distorted/external/RubikUpdates.java
index dc03f673..027a979e 100644
--- a/src/main/java/org/distorted/external/RubikUpdates.java
+++ b/src/main/java/org/distorted/external/RubikUpdates.java
@@ -96,37 +96,37 @@ public class RubikUpdates
     String iconPresent = elements[4].trim();
     String longName    = elements[5];
     String description = elements[6];
-    int oMinor, eMinor, oPercent, oIcon;
+    int oVersion, eVersion, oPercent, oIcon;
 
-    try { oMinor = Integer.parseInt(objMinor); }
-    catch (NumberFormatException ex) { oMinor = -1; }
-    try { eMinor = Integer.parseInt(extMinor); }
-    catch (NumberFormatException ex) { eMinor = -1; }
+    try { oVersion = Integer.parseInt(objMinor); }
+    catch (NumberFormatException ex) { oVersion = -1; }
+    try { eVersion = Integer.parseInt(extMinor); }
+    catch (NumberFormatException ex) { eVersion = -1; }
     try { oPercent = Integer.parseInt(percent); }
     catch (NumberFormatException ex) { oPercent = -1; }
     try { oIcon = Integer.parseInt(iconPresent); }
     catch (NumberFormatException ex) { oIcon = 0; }
 
-    if( oMinor>=0 && eMinor>=0 && oPercent>=0 )
+    if( oVersion>=0 && eVersion>=0 && oPercent>=0 )
       {
       String upperName = shortName.toUpperCase(Locale.ENGLISH);
       int objOrdinal = RubikObjectList.getOrdinal(upperName);
       boolean updateO=true, updateE=true;
 
-      if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "downloaded object "+shortName+" oMinor="+oMinor+" eMinor="+eMinor);
+      if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "downloaded object "+shortName+" oVer="+oVersion+" eVer="+eVersion);
 
       if( objOrdinal>=0 )
         {
-        int localObjectMinor = RubikObjectList.getLocalObjectMinor(objOrdinal);
-        int localExtrasMinor = RubikObjectList.getLocalExtrasMinor(objOrdinal);
-        updateO = localObjectMinor<oMinor;
-        updateE = localExtrasMinor<eMinor;
+        int localObjectVer = RubikObjectList.getLocalObjectVersion(objOrdinal);
+        int localExtrasVer = RubikObjectList.getLocalExtrasVersion(objOrdinal);
+        updateO = localObjectVer<oVersion;
+        updateE = localExtrasVer<eVersion;
 
-        if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "object exists locally, localObjectMinor="+localObjectMinor+" localExtrasMinor="+localExtrasMinor);
+        if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "object exists locally, localObjectVer="+localObjectVer+" localExtrasVer="+localExtrasVer);
         }
       if( updateO || updateE )
         {
-        UpdateInfo info = new UpdateInfo(shortName,longName,description,oMinor,eMinor,oPercent,oIcon,updateO,updateE);
+        UpdateInfo info = new UpdateInfo(shortName,longName,description,oVersion,eVersion,oPercent,oIcon,updateO,updateE);
         if(oPercent>=100)
           {
           if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "object added to completed");
diff --git a/src/main/java/org/distorted/main/RubikActivity.java b/src/main/java/org/distorted/main/RubikActivity.java
index c388389d..068d0b59 100644
--- a/src/main/java/org/distorted/main/RubikActivity.java
+++ b/src/main/java/org/distorted/main/RubikActivity.java
@@ -273,8 +273,9 @@ public class RubikActivity extends AppCompatActivity
       int object = RubikObjectList.getCurrObject();
       changeIfDifferent(object,view.getObjectControl());
 
-      if( mIsChinese && !mPolicyAccepted ) privacyPolicy();
-      else
+      // switch this off - we are not present in China anymore.
+      // if( mIsChinese && !mPolicyAccepted ) privacyPolicy();
+      // else
         {
         if( !mOldVersion.equals(mCurrVersion) )
           {
diff --git a/src/main/java/org/distorted/objects/RubikObject.java b/src/main/java/org/distorted/objects/RubikObject.java
index d0975056..ffeead6a 100644
--- a/src/main/java/org/distorted/objects/RubikObject.java
+++ b/src/main/java/org/distorted/objects/RubikObject.java
@@ -27,7 +27,6 @@ import org.distorted.external.RubikFiles;
 import org.distorted.jsons.ObjectJson;
 import org.distorted.main.R;
 import org.distorted.main.RubikActivity;
-import org.distorted.objectlib.json.JsonWriter;
 import org.distorted.objectlib.main.ObjectType;
 import org.distorted.objectlib.patterns.RubikPatternList;
 
@@ -47,7 +46,7 @@ public class RubikObject
 
   private boolean mIsFree;
   private int mJsonID, mMeshID, mExtrasID;
-  private int mObjectMinor, mExtrasMinor;
+  private int mObjectVersion, mExtrasVersion;
   private int mNumScramble;
   private int mMeshState;
   private int mExtrasOrdinal;
@@ -64,7 +63,6 @@ public class RubikObject
     mNumScramble = type.getNumScramble();
     mPrice       = type.getPrice();
     mIsFree      = mPrice==0;
-
     mIconID      = type.getIconID();
     mJsonID      = ObjectJson.getObjectJsonID(ordinal);
     mMeshID      = ObjectMesh.getMeshID(ordinal);
@@ -76,8 +74,8 @@ public class RubikObject
     mMeshState = MESH_NICE;
     mExtrasOrdinal = -1;
 
-    mObjectMinor = JsonWriter.VERSION_OBJECT_MINOR;
-    mExtrasMinor = JsonWriter.VERSION_EXTRAS_MINOR;
+    mObjectVersion = ObjectType.getObjectVersion(ordinal);
+    mExtrasVersion = ObjectType.getExtrasVersion(ordinal);
 
     mStaticIconD  = null;
     mRescaledIconD= null;
@@ -94,8 +92,8 @@ public class RubikObject
     mNumScramble   = object.numScrambles;
     mPrice         = object.price;
     mIsFree        = mPrice==0;
-    mObjectMinor   = object.objectMinor;
-    mExtrasMinor   = object.extrasMinor;
+    mObjectVersion = object.objectVersion;
+    mExtrasVersion = object.extrasVersion;
 
     mPatterns      = null;
     mMeshState     = MESH_NICE;
@@ -113,22 +111,22 @@ public class RubikObject
     {
     boolean changed = false;
 
-    if( object.objectMinor>JsonWriter.VERSION_OBJECT_MINOR )
+    if( object.objectVersion>mObjectVersion )
       {
       if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Updating RubikObject's "+object.shortName+" main JSON");
 
-      mObjectMinor = object.objectMinor;
-      mNumScramble = object.numScrambles;
+      mObjectVersion= object.objectVersion;
+      mNumScramble  = object.numScrambles;
       mMeshID =  0;
       mJsonID = -1;
       changed = true;
       }
 
-    if( object.extrasMinor>JsonWriter.VERSION_EXTRAS_MINOR )
+    if( object.extrasVersion>mExtrasVersion )
       {
       if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Updating RubikObject's "+object.shortName+" extras JSON");
 
-      mExtrasMinor = object.extrasMinor;
+      mExtrasVersion = object.extrasVersion;
       mExtrasID = -1;
       changed = true;
       }
@@ -243,16 +241,16 @@ public class RubikObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectMinor()
+  public int getObjectVersion()
     {
-    return mObjectMinor;
+    return mObjectVersion;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getExtrasMinor()
+  public int getExtrasVersion()
     {
-    return mExtrasMinor;
+    return mExtrasVersion;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/RubikObjectList.java b/src/main/java/org/distorted/objects/RubikObjectList.java
index 9f319e30..e3dbe30d 100644
--- a/src/main/java/org/distorted/objects/RubikObjectList.java
+++ b/src/main/java/org/distorted/objects/RubikObjectList.java
@@ -43,15 +43,15 @@ public class RubikObjectList
     {
     String shortName;
     boolean icon,object,extras;
-    int numScrambles, objectMinor, extrasMinor, price;
+    int numScrambles, objectVersion, extrasVersion, price;
 
-    DownloadedObject(String sName, int scrambles, int pr, int oMinor, int eMinor, boolean i, boolean o, boolean e)
+    DownloadedObject(String sName, int scrambles, int pr, int oVersion, int eVersion, boolean i, boolean o, boolean e)
       {
-      shortName   = sName;
-      numScrambles= scrambles;
-      price       = pr;
-      objectMinor = oMinor;
-      extrasMinor = eMinor;
+      shortName     = sName;
+      numScrambles  = scrambles;
+      price         = pr;
+      objectVersion = oVersion;
+      extrasVersion = eVersion;
 
       icon   = i;
       object = o;
@@ -187,8 +187,8 @@ public class RubikObjectList
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // PUBLIC API
 
-  public static boolean addDownloadedObject(Context context, String shortName, int numScrambles, int price, int objectMinor,
-                                         int extrasMinor, boolean icon, boolean object, boolean extras)
+  public static boolean addDownloadedObject(Context context, String shortName, int numScrambles, int price, int objectVersion,
+                                         int extrasVersion, boolean icon, boolean object, boolean extras)
     {
     if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "New downloaded object "+shortName+" icon="+icon+" object="+object+" extras="+extras);
 
@@ -200,11 +200,11 @@ public class RubikObjectList
         obj.object|= object;
         obj.extras|= extras;
 
-        if( !obj.object ) objectMinor=-1;
-        if( !obj.extras ) extrasMinor=-1;
+        if( !obj.object ) objectVersion=-1;
+        if( !obj.extras ) extrasVersion=-1;
 
-        obj.objectMinor = objectMinor;
-        obj.extrasMinor = extrasMinor;
+        obj.objectVersion = objectVersion;
+        obj.extrasVersion = extrasVersion;
 
         if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Updating downloaded object "+shortName+" icon="+obj.icon+" object="+obj.object+" extras="+obj.extras);
 
@@ -222,10 +222,10 @@ public class RubikObjectList
         }
       }
 
-    if( !object ) objectMinor=-1;
-    if( !extras ) extrasMinor=-1;
+    if( !object ) objectVersion=-1;
+    if( !extras ) extrasVersion=-1;
 
-    DownloadedObject obj = new DownloadedObject(shortName,numScrambles,price,objectMinor,extrasMinor,icon,object,extras);
+    DownloadedObject obj = new DownloadedObject(shortName,numScrambles,price,objectVersion,extrasVersion,icon,object,extras);
     if ( internalAddDownloadedObject(obj) )
       {
       if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Adding new downloaded object "+shortName+" icon="+obj.icon+" object="+obj.object+" extras="+obj.extras);
@@ -345,9 +345,9 @@ public class RubikObjectList
         downloadedObjects.append(' ');
         downloadedObjects.append(object.numScrambles);
         downloadedObjects.append(' ');
-        downloadedObjects.append(object.objectMinor);
+        downloadedObjects.append(object.objectVersion);
         downloadedObjects.append(' ');
-        downloadedObjects.append(object.extrasMinor);
+        downloadedObjects.append(object.extrasVersion);
         downloadedObjects.append(' ');
         downloadedObjects.append(object.icon   ? "1":"0");
         downloadedObjects.append(' ');
@@ -409,8 +409,8 @@ public class RubikObjectList
           {
           String name = parts[0];
           String scra = parts[1];
-          String objM = parts[2];
-          String extM = parts[3];
+          String objV = parts[2];
+          String extV = parts[3];
           String icon = parts[4];
           String obje = parts[5];
           String extr = parts[6];
@@ -427,14 +427,14 @@ public class RubikObjectList
             }
 
           int scrambles = Integer.parseInt(scra);
-          int oMinor    = Integer.parseInt(objM);
-          int eMinor    = Integer.parseInt(extM);
+          int oVersion  = Integer.parseInt(objV);
+          int eVersion  = Integer.parseInt(extV);
 
           boolean bIcon = icon.equals("1");
           boolean bObje = obje.equals("1");
           boolean bExtr = extr.equals("1");
 
-          addDownloadedObject(context,name,scrambles,price,oMinor,eMinor,bIcon,bObje,bExtr);
+          addDownloadedObject(context,name,scrambles,price,oVersion,eVersion,bIcon,bObje,bExtr);
           }
         }
       }
@@ -657,17 +657,17 @@ public class RubikObjectList
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public static int getLocalObjectMinor(int objectOrdinal)
+  public static int getLocalObjectVersion(int objectOrdinal)
     {
     RubikObject object = getObject(objectOrdinal);
-    return object!=null ? object.getObjectMinor() : -1;
+    return object!=null ? object.getObjectVersion() : -1;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public static int getLocalExtrasMinor(int objectOrdinal)
+  public static int getLocalExtrasVersion(int objectOrdinal)
     {
     RubikObject object = getObject(objectOrdinal);
-    return object!=null ? object.getExtrasMinor() : -1;
+    return object!=null ? object.getExtrasVersion() : -1;
     }
 }
