commit ac1900c376a7c4f954918325e4c8f78bf1892185
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Jul 12 19:34:27 2022 +0200

    correct the way we add new downloadeed objects.

diff --git a/src/main/java/org/distorted/dialogs/RubikDialogUpdateView.java b/src/main/java/org/distorted/dialogs/RubikDialogUpdateView.java
index 5f9bf5f0..b8f56820 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogUpdateView.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogUpdateView.java
@@ -37,6 +37,9 @@ import org.distorted.main.R;
 import org.distorted.external.RubikNetwork;
 import org.distorted.external.RubikUpdates;
 import org.distorted.objectlib.json.JsonReader;
+import org.distorted.objects.MainEntry;
+import org.distorted.objects.MainEntryList;
+import org.distorted.objects.RubikObject;
 import org.distorted.objects.RubikObjectList;
 import org.distorted.screens.RubikScreenPlay;
 import org.distorted.screens.ScreenList;
@@ -221,8 +224,17 @@ public class RubikDialogUpdateView implements RubikNetwork.Downloadee
 
             if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "1");
 
-            RubikObjectList.addDownloadedObject(act, mInfo.mObjectShortName,mInfo.mNumScrambles, mInfo.mObjectMinorVersion,
-                                                mInfo.mExtrasMinorVersion, mIconSaved, oSuccess, eSuccess);
+            boolean success = RubikObjectList.addDownloadedObject(act, mInfo.mObjectShortName,mInfo.mNumScrambles, mInfo.mObjectMinorVersion,
+                                                                  mInfo.mExtrasMinorVersion, mIconSaved, oSuccess, eSuccess);
+            if( success )
+              {
+              int numObjects = RubikObjectList.getNumObjects();
+              int ordinal = numObjects-1;
+              RubikObject rubikObject = RubikObjectList.getObject(ordinal);
+              MainEntry entry = new MainEntry(rubikObject,ordinal);
+              MainEntryList list = MainEntryList.getInstance();
+              list.addEntry(entry);
+              }
 
             if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "2");
 
diff --git a/src/main/java/org/distorted/objects/MainEntry.java b/src/main/java/org/distorted/objects/MainEntry.java
index e7224fcf..dd3fc43d 100644
--- a/src/main/java/org/distorted/objects/MainEntry.java
+++ b/src/main/java/org/distorted/objects/MainEntry.java
@@ -41,7 +41,7 @@ public class MainEntry
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MainEntry(RubikObject object, int ordinal)
+  public MainEntry(RubikObject object, int ordinal)
     {
     mType         = TYPE_OBJECT;
     mIconID       = 0;
@@ -53,7 +53,7 @@ public class MainEntry
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MainEntry(int type, int iconID)
+  public MainEntry(int type, int iconID)
     {
     mType         = type;
     mIconID       = iconID;
diff --git a/src/main/java/org/distorted/objects/RubikObjectList.java b/src/main/java/org/distorted/objects/RubikObjectList.java
index 59db5a96..80c38be3 100644
--- a/src/main/java/org/distorted/objects/RubikObjectList.java
+++ b/src/main/java/org/distorted/objects/RubikObjectList.java
@@ -138,10 +138,6 @@ public class RubikObjectList
     mObjects.add(obj);
     mNumObjects++;
 
-    MainEntry entry = new MainEntry(obj,mNumObjects-1);
-    MainEntryList list = MainEntryList.getInstance();
-    list.addEntry(entry);
-
     if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "creating downloaded object "+obj.getUpperName() );
 
     if( obj.hasExtras() )
@@ -203,7 +199,7 @@ public class RubikObjectList
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public static void addDownloadedObject(Context context, String shortName, int numScrambles, int objectMinor,
+  public static boolean addDownloadedObject(Context context, String shortName, int numScrambles, int objectMinor,
                                          int extrasMinor, 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);
@@ -234,7 +230,7 @@ public class RubikObjectList
           android.util.Log.e("D", "exception trying to reload object: "+ex.getMessage() );
           }
 
-        return;
+        return false;
         }
       }
 
@@ -246,16 +242,16 @@ public class RubikObjectList
       {
       if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Adding new downloaded object "+shortName+" icon="+obj.icon+" object="+obj.object+" extras="+obj.extras);
       mDownloadedObjects.add(obj);
+      return true;
       }
     else
       {
       if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "New downloaded object "+shortName+" is already built-in, deleting");
-
-      mDownloadedObjects.remove(obj);
       RubikFiles files = RubikFiles.getInstance();
       files.deleteIcon(context,shortName);
       files.deleteJsonObject(context,shortName);
       files.deleteJsonExtras(context,shortName);
+      return false;
       }
     }
 
diff --git a/src/main/java/org/distorted/screens/RubikScreenPlay.java b/src/main/java/org/distorted/screens/RubikScreenPlay.java
index 12287829..d22175e3 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPlay.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPlay.java
@@ -99,7 +99,7 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
     mMenuButtonHeight = (int)(mScreenWidth*RubikActivity.MENU_BUTTON_HEIGHT);
     mMenuTextSize     = (int)(mScreenWidth*RubikActivity.MENU_MAIN_TEXT_SIZE);
 
-    recreatePopup();
+    mObjectPopup = null;
 
     // TOP ////////////////////////////
     LinearLayout layoutTop = act.findViewById(R.id.upperBar);
@@ -183,6 +183,11 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
 
   private void setupObjectWindow(final RubikActivity act, final float width, final float height)
     {
+    MainEntryList list = MainEntryList.getInstance();
+    int numEntries = list.getNumOfEntries();
+    mRowCount = (numEntries + NUM_COLUMNS-1) / NUM_COLUMNS;
+    mColCount = NUM_COLUMNS;
+
     int cubeSize = (int)(width/9);
     int margin   = (int)(width*RubikActivity.LARGE_MARGIN);
     mObjectSize  = (int)(cubeSize + 2*margin + 0.5f);
@@ -216,9 +221,6 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
       colSpecs[col] = GridLayout.spec(col);
       }
 
-    MainEntryList list = MainEntryList.getInstance();
-    int numEntries = list.getNumOfEntries();
-
     for(int entry=0; entry<numEntries; entry++)
       {
       final MainEntry mainEntry = list.getEntry(entry);
@@ -618,11 +620,6 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
   public void recreatePopup()
     {
     mObjectPopup = null;
-
-    MainEntryList list = MainEntryList.getInstance();
-    int numObjects = list.getNumOfEntries();
-    mRowCount = (numObjects + NUM_COLUMNS-1) / NUM_COLUMNS;
-    mColCount = NUM_COLUMNS;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
