commit 506f7ceb4c7619ab18bae61e59a0152e761afb52
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sat Jan 29 01:08:08 2022 +0100

    Beginnings of support for dynamically adding downloaded JSONs to the local RubikObjectList: SharedPrefs part.

diff --git a/src/main/java/org/distorted/objects/RubikObjectList.java b/src/main/java/org/distorted/objects/RubikObjectList.java
index f6d030d7..006def66 100644
--- a/src/main/java/org/distorted/objects/RubikObjectList.java
+++ b/src/main/java/org/distorted/objects/RubikObjectList.java
@@ -40,15 +40,30 @@ import static org.distorted.objectlib.main.ObjectType.NUM_OBJECTS;
 public class RubikObjectList
 {
   public static final int DEF_OBJECT= ObjectConstants.CUBE_3;
-
   public static int MAX_LEVEL;
 
-  private static RubikObjectList mType;
+  private static RubikObjectList mThis;
   private static int mNumObjects;
   private static int mNumExtras;
   private static ArrayList<RubikObject> mObjects;
   private static int mObject = DEF_OBJECT;
 
+  private static class DownloadedObject
+    {
+    String shortName;
+    boolean icon,object,extras;
+
+    DownloadedObject(String sName, boolean i, boolean o, boolean e)
+      {
+      shortName = sName;
+      icon   = i;
+      object = o;
+      extras = e;
+      }
+    }
+
+  private static ArrayList<DownloadedObject> mDownloadedObjects;
+
   static
     {
     int max = Integer.MIN_VALUE;
@@ -69,7 +84,8 @@ public class RubikObjectList
     mNumObjects= 0;
     mNumExtras = 0;
 
-    mObjects = new ArrayList<>();
+    mObjects           = new ArrayList<>();
+    mDownloadedObjects = new ArrayList<>();
 
     createBuiltinObjects();
     }
@@ -93,6 +109,13 @@ public class RubikObjectList
       }
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private static void internalAddDownloadedObject(DownloadedObject object)
+    {
+
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // PUBLIC API
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -125,7 +148,24 @@ public class RubikObjectList
 
   public static void addDownloadedObject(String shortName, boolean icon, boolean object, boolean extras)
     {
+    for( DownloadedObject obj : mDownloadedObjects )
+      {
+      if( obj.shortName.equals(shortName) )
+        {
+        obj.icon  |= icon;
+        obj.object|= object;
+        obj.extras|= extras;
+
+        android.util.Log.e("D", "UPDATING "+shortName);
+
+        return;
+        }
+      }
+
+    DownloadedObject extra = new DownloadedObject(shortName,icon,object,extras);
+    mDownloadedObjects.add(extra);
 
+    internalAddDownloadedObject(extra);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -148,6 +188,29 @@ public class RubikObjectList
     {
     RubikObject obj = getObject(mObject);
     if( obj!=null ) editor.putString("rol_objName", obj.getName() );
+
+    int numDownloaded = mDownloadedObjects.size();
+
+    if( numDownloaded>0 )
+      {
+      StringBuilder downloadedObjects = new StringBuilder();
+
+      for(int i=0; i<numDownloaded; i++)
+        {
+        if( i>0 ) downloadedObjects.append(',');
+
+        DownloadedObject object = mDownloadedObjects.get(i);
+        downloadedObjects.append(object.shortName);
+        downloadedObjects.append(' ');
+        downloadedObjects.append(object.icon   ? "1":"0");
+        downloadedObjects.append(' ');
+        downloadedObjects.append(object.object ? "1":"0");
+        downloadedObjects.append(' ');
+        downloadedObjects.append(object.extras ? "1":"0");
+        }
+
+      editor.putString("rol_downloaded", downloadedObjects.toString() );
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -176,6 +239,36 @@ public class RubikObjectList
     mObject = getOrdinal(objName);
 
     if( mObject<0 || mObject>=mNumObjects ) mObject = DEF_OBJECT;
+
+    String downloaded = preferences.getString("rol_downloaded","");
+
+    android.util.Log.e("D", downloaded);
+
+    if( !downloaded.equals(""))
+      {
+      String[] dObjects = downloaded.split(",");
+
+      for(String dObj : dObjects)
+        {
+        String[] parts = dObj.split(" ");
+
+        if( parts.length==4 )
+          {
+          String name = parts[0];
+          String icon = parts[1];
+          String obje = parts[2];
+          String extr = parts[3];
+
+          boolean bIcon = icon.equals("1");
+          boolean bObje = obje.equals("1");
+          boolean bExtr = extr.equals("1");
+
+          android.util.Log.e("D", "adding: "+name);
+
+          addDownloadedObject(name,bIcon,bObje,bExtr);
+          }
+        }
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -221,7 +314,7 @@ public class RubikObjectList
 
   public static RubikObject getObject(int ordinal)
     {
-    if( mType==null ) mType = new RubikObjectList();
+    if( mThis==null ) mThis = new RubikObjectList();
     return ordinal>=0 && ordinal<mNumObjects ? mObjects.get(ordinal) : null;
     }
 
@@ -229,7 +322,7 @@ public class RubikObjectList
 
   public static int getNumObjects()
     {
-    if( mType==null ) mType = new RubikObjectList();
+    if( mThis==null ) mThis = new RubikObjectList();
     return mNumObjects;
     }
 
@@ -237,7 +330,7 @@ public class RubikObjectList
 
   public static int getOrdinal(String name)
     {
-    if( mType==null ) mType = new RubikObjectList();
+    if( mThis==null ) mThis = new RubikObjectList();
 
     for(int i=0; i<mNumObjects; i++)
       {
