commit fad10885a01d8627821b1b795896675a3f8acfc4
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Aug 4 23:18:28 2022 +0200

    Move the 'bandaged' button back to the main menu.

diff --git a/src/main/java/org/distorted/dialogs/RubikDialogUpdateView.java b/src/main/java/org/distorted/dialogs/RubikDialogUpdateView.java
index 8f732c22..441bd65a 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogUpdateView.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogUpdateView.java
@@ -27,9 +27,6 @@ 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;
@@ -218,29 +215,26 @@ public class RubikDialogUpdateView implements RubikNetwork.Downloadee
                                                                   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");
+              if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "2");
 
-            RubikNetwork network = RubikNetwork.getInstance();
-            network.updateDone(mInfo.mObjectShortName);
+              RubikNetwork network = RubikNetwork.getInstance();
+              network.updateDone(mInfo.mObjectShortName);
 
-            if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "3");
+              if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "3");
 
-            RubikScreenPlay play = (RubikScreenPlay)ScreenList.PLAY.getScreenClass();
-            play.recreatePopup();
+              RubikScreenPlay play = (RubikScreenPlay)ScreenList.PLAY.getScreenClass();
+              play.recreatePopup();
 
-            if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "4");
+              if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "4");
 
-            makeProgress(100,R.string.success);
+              makeProgress(100,R.string.success);
 
-            if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "5");
+              if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "5");
+              }
+            else
+              {
+              displayError(R.string.saveError);
+              }
             }
           else
             {
diff --git a/src/main/java/org/distorted/main/RubikActivity.java b/src/main/java/org/distorted/main/RubikActivity.java
index 504144e9..0db1a8b7 100644
--- a/src/main/java/org/distorted/main/RubikActivity.java
+++ b/src/main/java/org/distorted/main/RubikActivity.java
@@ -81,7 +81,7 @@ public class RubikActivity extends AppCompatActivity
     public static final float MENU_SMALL_TEXT_SIZE= 0.035f;
     public static final float TAB_WIDTH           = 0.100f;
     public static final float TAB_HEIGHT          = 0.100f;
-    public static final float MENU_BUTTON_HEIGHT  = 0.120f;
+    public static final float MENU_BUTTON_HEIGHT  = 0.115f;
 
     public static final int FLAGS =  View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
diff --git a/src/main/java/org/distorted/objects/MainEntry.java b/src/main/java/org/distorted/objects/MainEntry.java
deleted file mode 100644
index 5c1e3129..00000000
--- a/src/main/java/org/distorted/objects/MainEntry.java
+++ /dev/null
@@ -1,94 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Copyright 2022 Leszek Koltunski                                                               //
-//                                                                                               //
-// This file is part of Magic Cube.                                                              //
-//                                                                                               //
-// Magic Cube is proprietary software licensed under an EULA which you should have received      //
-// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-package org.distorted.objects;
-
-import android.app.Activity;
-import android.graphics.drawable.Drawable;
-import android.widget.ImageButton;
-
-import org.distorted.main.RubikActivity;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-public class MainEntry
-{
-  public final static int TYPE_OBJECT  = 0;
-  public final static int TYPE_CREATOR = 1;
-
-  private final RubikObject mObject;
-  private final int mType;
-  private final int mIconID;
-  private final int mOridnal;
-  private Drawable mIconDrawable;
-  private boolean mPrepared;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public MainEntry(RubikObject object, int ordinal)
-    {
-    mType         = TYPE_OBJECT;
-    mIconID       = 0;
-    mOridnal      = ordinal;
-    mIconDrawable = null;
-    mObject       = object;
-    mPrepared     = false;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public MainEntry(int type, int iconID)
-    {
-    mType         = type;
-    mIconID       = iconID;
-    mOridnal      = -1;
-    mIconDrawable = null;
-    mObject       = null;
-    mPrepared     = false;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private void prepare(Activity act)
-    {
-    mIconDrawable = act.getDrawable(mIconID);
-    mPrepared = true;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// PUBLIC API
-
-  public void setIconTo(RubikActivity act, ImageButton button)
-    {
-    if( mType==TYPE_OBJECT )
-      {
-      if( mObject!=null ) mObject.setIconTo(act,button);
-      else android.util.Log.e("D", "MainListEntry: object null!!");
-      }
-    else if( mType==TYPE_CREATOR )
-      {
-      if( !mPrepared ) prepare(act);
-      button.setBackground(mIconDrawable);
-      }
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public int getType()
-    {
-    return mType;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public int getOrdinal()
-    {
-    return mOridnal;
-    }
-}
diff --git a/src/main/java/org/distorted/objects/MainEntryList.java b/src/main/java/org/distorted/objects/MainEntryList.java
deleted file mode 100644
index a5617a5f..00000000
--- a/src/main/java/org/distorted/objects/MainEntryList.java
+++ /dev/null
@@ -1,79 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Copyright 2022 Leszek Koltunski                                                               //
-//                                                                                               //
-// This file is part of Magic Cube.                                                              //
-//                                                                                               //
-// Magic Cube is proprietary software licensed under an EULA which you should have received      //
-// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-package org.distorted.objects;
-
-import org.distorted.main.R;
-
-import java.util.ArrayList;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-public class MainEntryList
-{
-  private final ArrayList<MainEntry> mList;
-  private static MainEntryList mThis;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private MainEntryList()
-    {
-    mList = new ArrayList<>();
-
-    int numObjects = RubikObjectList.getNumObjects();
-
-    for(int i=0; i<numObjects; i++)
-      {
-      RubikObject object = RubikObjectList.getObject(i);
-
-      if( object!=null )
-        {
-        MainEntry entry = new MainEntry(object,i);
-        mList.add(entry);
-
-        String name = object.getLowerName();
-
-        if( name!=null && name.equals("ban4_3") )
-          {
-          MainEntry creator = new MainEntry(MainEntry.TYPE_CREATOR, R.drawable.plus);
-          mList.add(creator);
-          }
-        }
-      }
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public static MainEntryList getInstance()
-    {
-    if( mThis==null ) mThis = new MainEntryList();
-    return mThis;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void addEntry(MainEntry entry)
-    {
-    mList.add(entry);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public int getNumOfEntries()
-    {
-    return mList.size();
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public MainEntry getEntry(int index)
-    {
-    return mList.get(index);
-    }
-}
diff --git a/src/main/java/org/distorted/screens/RubikScreenPlay.java b/src/main/java/org/distorted/screens/RubikScreenPlay.java
index c77dd0f8..c32ed31e 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPlay.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPlay.java
@@ -43,8 +43,6 @@ import org.distorted.dialogs.RubikDialogScores;
 import org.distorted.dialogs.RubikDialogTutorial;
 import org.distorted.helpers.TransparentImageButton;
 import org.distorted.objectlib.main.ObjectControl;
-import org.distorted.objects.MainEntry;
-import org.distorted.objects.MainEntryList;
 import org.distorted.objects.RubikObject;
 import org.distorted.objects.RubikObjectList;
 
@@ -56,7 +54,7 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
   {
   public static final int NUM_COLUMNS  = 5;
   public static final int LEVELS_SHOWN = 8;
-  private static final int NUM_BUTTONS = 5;
+  private static final int NUM_BUTTONS = 6;
   private static final int[] mLocation = new int[2];
 
   private TransparentImageButton mObjButton, mMenuButton, mSolveButton, mScrambleButton;
@@ -173,9 +171,8 @@ 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;
+    int numObjects = RubikObjectList.getNumObjects();
+    mRowCount = (numObjects + NUM_COLUMNS-1) / NUM_COLUMNS;
     mColCount = NUM_COLUMNS;
 
     int cubeSize = (int)(width/9);
@@ -211,12 +208,13 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
       colSpecs[col] = GridLayout.spec(col);
       }
 
-    for(int entry=0; entry<numEntries; entry++)
+    for(int object=0; object<numObjects; object++)
       {
-      final MainEntry mainEntry = list.getEntry(entry);
-      int row = entry/NUM_COLUMNS;
+      final int ordinal = object;
+      final RubikObject rObject = RubikObjectList.getObject(object);
+      int row = object/NUM_COLUMNS;
       ImageButton button = new ImageButton(act);
-      if( mainEntry!=null ) mainEntry.setIconTo(act,button);
+      if( rObject!=null ) rObject.setIconTo(act,button);
 
       button.setOnClickListener( new View.OnClickListener()
         {
@@ -225,20 +223,10 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
           {
           if( act.getControl().isUINotBlocked() && ScreenList.getCurrentScreen()== ScreenList.PLAY )
             {
-            int type = mainEntry!=null ? mainEntry.getType() : -1;
-
-            if( type==MainEntry.TYPE_OBJECT )
-              {
-              int ordinal = mainEntry.getOrdinal();
-              RubikObjectList.setCurrObject(ordinal);
-              act.changeObject(ordinal,true);
-              if( mMenuPopup!=null ) setupLevelColors(act);
-              mMovesController.clearMoves(act);
-              }
-            else if( type==MainEntry.TYPE_CREATOR )
-              {
-              act.switchToBandagedCreator();
-              }
+            RubikObjectList.setCurrObject(ordinal);
+            act.changeObject(ordinal,true);
+            if( mMenuPopup!=null ) setupLevelColors(act);
+            mMovesController.clearMoves(act);
             }
 
           if( mObjectPopup!=null ) mObjectPopup.dismiss();
@@ -433,6 +421,18 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
           }
         });
 
+    Button bandaged = layout.findViewById(R.id.menuBandaged);
+    bandaged.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
+    bandaged.setOnClickListener( new View.OnClickListener()
+        {
+        @Override
+        public void onClick(View v)
+          {
+          mMenuPopup.dismiss();
+          act.switchToBandagedCreator();
+          }
+        });
+
     Button about = layout.findViewById(R.id.menuAbout);
     about.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
     about.setOnClickListener( new View.OnClickListener()
diff --git a/src/main/res/drawable/plus.png b/src/main/res/drawable/plus.png
deleted file mode 100644
index 0f580927..00000000
Binary files a/src/main/res/drawable/plus.png and /dev/null differ
diff --git a/src/main/res/layout/popup_menu.xml b/src/main/res/layout/popup_menu.xml
index 45dab0a6..af922ca1 100644
--- a/src/main/res/layout/popup_menu.xml
+++ b/src/main/res/layout/popup_menu.xml
@@ -54,6 +54,18 @@
       android:backgroundTint="@color/dark_grey"
       android:gravity="center"/>
 
+   <Button
+      android:id="@+id/menuBandaged"
+      android:text="@string/bandaged"
+      android:layout_width="match_parent"
+      android:layout_height="0dp"
+      android:layout_weight="1.0"
+      android:paddingRight="10dp"
+      android:paddingLeft="10dp"
+      android:singleLine="true"
+      android:backgroundTint="@color/dark_grey"
+      android:gravity="center"/>
+
    <Button
       android:id="@+id/menuAbout"
       android:text="@string/about"
