commit 67d7fb28f0730e85a4a5896de579ac25d257c91e
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Jan 23 15:51:49 2023 +0100

    Progress with solvers dialog.

diff --git a/src/main/java/org/distorted/dialogs/RubikDialogSolverView.java b/src/main/java/org/distorted/dialogs/RubikDialogSolverView.java
index 42f3a2ec..0ac4931a 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogSolverView.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogSolverView.java
@@ -30,7 +30,7 @@ public class RubikDialogSolverView
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public RubikDialogSolverView(final RubikActivity act, final RubikDialogSolvers dialog, int object, int title, int desc, boolean implemented, int padding, int fontSize,
+  public RubikDialogSolverView(final RubikActivity act, final RubikDialogSolvers dialog, final int index, int object, int title, int desc, int padding, int fontSize,
                                LinearLayout.LayoutParams pView, LinearLayout.LayoutParams pText, LinearLayout.LayoutParams pButt )
     {
     mView = act.getLayoutInflater().inflate(R.layout.dialog_solvers_pane, null);
@@ -43,7 +43,6 @@ public class RubikDialogSolverView
     descView.setText(desc);
 
     titleView.setLayoutParams(pText);
-    descView.setLayoutParams(pText);
 
     ImageView icon = mView.findViewById(R.id.solvers_pane_image);
     RubikObject robject = RubikObjectList.getObject(object);
@@ -57,6 +56,7 @@ public class RubikDialogSolverView
       public void onClick(View v)
         {
         dialog.dismiss();
+        act.setSolverIndex(index);
         ScreenList.switchScreen(act, ScreenList.SVER);
         }
       });
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogSolvers.java b/src/main/java/org/distorted/dialogs/RubikDialogSolvers.java
index df5022e0..ab7ac286 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogSolvers.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogSolvers.java
@@ -11,6 +11,8 @@ package org.distorted.dialogs;
 
 import android.app.Dialog;
 import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
@@ -24,6 +26,23 @@ import org.distorted.solvers.ImplementedSolversList;
 
 public class RubikDialogSolvers extends RubikDialogAbstract
   {
+  @Override
+  public void onResume()
+    {
+    super.onResume();
+
+    Window window = getDialog().getWindow();
+
+    if( window!=null )
+      {
+      WindowManager.LayoutParams params = window.getAttributes();
+      params.width  = (int)Math.min( mHeight*0.65f,mWidth*0.98f );
+      window.setAttributes(params);
+      }
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
   public int getResource()      { return R.layout.dialog_scrollable_panes; }
   public int getTitleResource() { return R.string.solver; }
   public boolean hasArgument()  { return false; }
@@ -48,25 +67,25 @@ public class RubikDialogSolvers extends RubikDialogAbstract
 
   public void prepareBody(Dialog dialog, View view, FragmentActivity act, float size)
     {
-    int minH  = (int)(mHeight*0.25f);
-    int margin= (int)(mHeight*0.01f);
-    int sizeH = (int)(mHeight*0.14f);
-    int textH = (int)(sizeH*0.27f);
-    int buttH = (int)(sizeH*0.35f);
-    int padd  = (int)(mHeight*0.01f);
-    int font  = (int)(mHeight*0.02f);
-
-    LinearLayout layout= view.findViewById(R.id.updates_main_layout);
-    TextView text  = view.findViewById(R.id.updates_message);
+    int minH  = (int)(mHeight*0.250f);
+    int margin= (int)(mHeight*0.010f);
+    int textH = (int)(mHeight*0.035f);
+    int buttH = (int)(mHeight*0.060f);
+    int padd  = (int)(mHeight*0.010f);
+    int font  = (int)(mHeight*0.025f);
+
+    LinearLayout layout= view.findViewById(R.id.dialog_scrollable_main_layout);
+    TextView text  = view.findViewById(R.id.dialog_scrollable_message);
     text.setVisibility(View.GONE);
 
     layout.setMinimumHeight(minH);
     view.setMinimumHeight(minH);
 
-    LinearLayout.LayoutParams pV = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, sizeH );
+    LinearLayout.LayoutParams pV = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT );
     pV.setMargins(margin, margin, margin, 0);
     LinearLayout.LayoutParams pT = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, textH );
     LinearLayout.LayoutParams pB = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, buttH );
+    pB.setMargins(0,2*margin,0,0);
 
     int num = ImplementedSolversList.NUM_OBJECTS;
     RubikActivity ract = (RubikActivity) getContext();
@@ -77,9 +96,7 @@ public class RubikDialogSolvers extends RubikDialogAbstract
       int object = solver.getObject();
       int title  = solver.getTitle();
       int description = solver.getDescription();
-      boolean implemented = solver.isImplemented();
-
-      RubikDialogSolverView pane = new RubikDialogSolverView(ract,this,object,title,description,implemented, padd, font, pV,pT,pB);
+      RubikDialogSolverView pane = new RubikDialogSolverView(ract,this,i,object,title,description, padd, font, pV,pT,pB);
       layout.addView(pane.getView());
       }
     }
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogUpdates.java b/src/main/java/org/distorted/dialogs/RubikDialogUpdates.java
index cece5533..5df79d59 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogUpdates.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogUpdates.java
@@ -15,6 +15,8 @@ import android.app.Dialog;
 import android.graphics.Bitmap;
 import android.util.TypedValue;
 import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
@@ -33,6 +35,23 @@ public class RubikDialogUpdates extends RubikDialogAbstract implements RubikNetw
   private int mMargin, mSize, mFontSize, mPadding;
   private ArrayList<RubikDialogUpdateView> mPanes;
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  @Override
+  public void onResume()
+    {
+    super.onResume();
+
+    Window window = getDialog().getWindow();
+
+    if( window!=null )
+      {
+      WindowManager.LayoutParams params = window.getAttributes();
+      params.width  = (int)Math.min( mHeight*0.65f,mWidth*0.98f );
+      window.setAttributes(params);
+      }
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int getResource()      { return R.layout.dialog_scrollable_panes; }
@@ -67,8 +86,8 @@ public class RubikDialogUpdates extends RubikDialogAbstract implements RubikNetw
     mFontSize = (int)(mHeight*0.02f);
     mPadding  = (int)(mHeight*0.01f);
 
-    mLayout= view.findViewById(R.id.updates_main_layout);
-    mText  = view.findViewById(R.id.updates_message);
+    mLayout= view.findViewById(R.id.dialog_scrollable_main_layout);
+    mText  = view.findViewById(R.id.dialog_scrollable_message);
     mText.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
     mText.setText( act.getString(R.string.downloading) );
 
diff --git a/src/main/java/org/distorted/main/RubikActivity.java b/src/main/java/org/distorted/main/RubikActivity.java
index 3f79f03b..7026dfb0 100644
--- a/src/main/java/org/distorted/main/RubikActivity.java
+++ b/src/main/java/org/distorted/main/RubikActivity.java
@@ -102,6 +102,7 @@ public class RubikActivity extends AppCompatActivity
     private int mHeightUpperBar, mHeightLowerBar;
     private int mOldVersion1, mOldVersion2, mOldVersion3;
     private String mOldVersion, mCurrVersion;
+    private int mSolverIndex;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -128,6 +129,7 @@ public class RubikActivity extends AppCompatActivity
       computeBarHeights();
 
       mCurrVersion = getAppVers();
+      mSolverIndex = 0;
 
       Thread thread = new Thread()
         {
@@ -734,4 +736,19 @@ public class RubikActivity extends AppCompatActivity
           }
         }
       }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void setSolverIndex(int index)
+      {
+      mSolverIndex = index;
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public int getSolverIndex()
+      {
+      return mSolverIndex;
+      }
+
 }
diff --git a/src/main/java/org/distorted/screens/RubikScreenSolver.java b/src/main/java/org/distorted/screens/RubikScreenSolver.java
index 1132362d..37d5de36 100644
--- a/src/main/java/org/distorted/screens/RubikScreenSolver.java
+++ b/src/main/java/org/distorted/screens/RubikScreenSolver.java
@@ -24,7 +24,6 @@ import android.widget.ImageButton;
 import android.widget.LinearLayout;
 
 import org.distorted.objectlib.main.ObjectControl;
-import org.distorted.objectlib.main.ObjectSignatures;
 import org.distorted.objectlib.main.TwistyObject;
 
 import org.distorted.dialogs.RubikDialogSolverError;
@@ -74,10 +73,11 @@ public class RubikScreenSolver extends RubikScreenAbstract
     mWeakAct = new WeakReference<>(act);
     mSolving = false;
 
-    int currentObject= ObjectSignatures.CUBE_3;//ImplementedSolversList.getObject(0); //TODO
+    int solverIndex= act.getSolverIndex();
+    ImplementedSolversList currentSolver = ImplementedSolversList.getSolver(solverIndex);
+    int currentObject = currentSolver.getObject();
     act.changeIfDifferent(currentObject,control);
     control.solveOnly();
-
     RubikObjectList.setCurrObject(currentObject);
 
     generateFaceColors();
diff --git a/src/main/java/org/distorted/solvers/ImplementedSolversList.java b/src/main/java/org/distorted/solvers/ImplementedSolversList.java
index 276cd1ff..d3a33f6a 100644
--- a/src/main/java/org/distorted/solvers/ImplementedSolversList.java
+++ b/src/main/java/org/distorted/solvers/ImplementedSolversList.java
@@ -19,6 +19,7 @@ public enum ImplementedSolversList
   CUBE3_KOCIEMBA (ObjectSignatures.CUBE_3, R.string.solver_cube3_title, R.string.solver_cube3_description, true),
   PYRAMINX       (ObjectSignatures.PYRA_3, R.string.solver_pyra3_title, R.string.solver_pyra3_description, false),
   IVY            (ObjectSignatures.IVY_2 , R.string.solver_ivy_title, R.string.solver_ivy_description, false),
+  TOWER          (ObjectSignatures.CU_232, R.string.solver_cu232_title, R.string.solver_cu232_description, false),
   ;
 
   public static final int NUM_OBJECTS = values().length;
diff --git a/src/main/res/layout/dialog_scrollable_panes.xml b/src/main/res/layout/dialog_scrollable_panes.xml
index f01de2c4..9b636708 100644
--- a/src/main/res/layout/dialog_scrollable_panes.xml
+++ b/src/main/res/layout/dialog_scrollable_panes.xml
@@ -7,7 +7,7 @@
     android:paddingRight="10dp">
 
     <LinearLayout
-        android:id="@+id/updates_main_layout"
+        android:id="@+id/dialog_scrollable_main_layout"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:background="@color/black"
@@ -15,7 +15,7 @@
         android:orientation="vertical">
 
         <TextView
-            android:id="@+id/updates_message"
+            android:id="@+id/dialog_scrollable_message"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:gravity="center"/>
diff --git a/src/main/res/layout/dialog_solvers_pane.xml b/src/main/res/layout/dialog_solvers_pane.xml
index a8bbcc52..245a849f 100644
--- a/src/main/res/layout/dialog_solvers_pane.xml
+++ b/src/main/res/layout/dialog_solvers_pane.xml
@@ -7,18 +7,13 @@
 	android:padding="8dp"
 	android:orientation="horizontal">
 
-    <LinearLayout
-   		android:layout_width="0dp"
- 		android:layout_height="match_parent"
- 		android:orientation="horizontal"
- 		android:layout_weight="0.5">
-
-   	    <ImageView
-   	        android:id="@+id/solvers_pane_image"
-   	        android:scaleType="fitCenter"
-   		    android:layout_width="match_parent"
-   		    android:layout_height="match_parent"/>
-    </LinearLayout>
+    <ImageView
+   	     android:id="@+id/solvers_pane_image"
+   	     android:scaleType="fitCenter"
+   		 android:layout_width="0dp"
+   		 android:layout_height="match_parent"
+   		 android:layout_gravity="top"
+   		 android:layout_weight="0.5"/>
 
    	<LinearLayout
    		android:layout_width="0dp"
@@ -38,17 +33,15 @@
         <TextView
     		android:id="@+id/solvers_pane_description"
     		android:gravity="top|start"
-    		android:layout_width="wrap_content"
-    		android:layout_height="wrap_content"
-    		android:singleLine="true"/>
+    		android:layout_width="match_parent"
+    		android:layout_height="wrap_content"/>
 
     	<Button
              android:id="@+id/solvers_pane_button"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
+             android:gravity="center"
              android:backgroundTint="@color/black"
-             android:minHeight="0dp"
-             android:minWidth="0dp"
              android:insetTop="0dp"
              android:insetBottom="0dp"
              android:text="@string/use_solver"/>
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 7ab4f885..203ec8b3 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -117,11 +117,13 @@
     <string name="color_orange">orange</string>
 
     <string name="solver_cube3_title" translatable="false">Kociemba 3x3 Solver</string>
-    <string name="solver_cube3_description" translatable="false">A near-perfect, instantaneous, two-phase 3x3x3 solver. Author: Herbert Kociemba.</string>
+    <string name="solver_cube3_description" translatable="false">A near-perfect, instantaneous, two-phase 3x3x3 solver.\nAuthor: Herbert Kociemba.</string>
     <string name="solver_pyra3_title" translatable="false">Pyraminx Solver</string>
-    <string name="solver_pyra3_description" translatable="false">A perfect, instantaneous, tablebase-based Pyraminx solver. Author: Leszek Koltunski.</string>
+    <string name="solver_pyra3_description" translatable="false">A perfect, instantaneous, tablebase-based Pyraminx solver.\nAuthor: Leszek Koltunski.</string>
     <string name="solver_ivy_title" translatable="false">Ivy Solver</string>
-    <string name="solver_ivy_description" translatable="false">A perfect, instantaneous, tablebase-based Ivy Cube solver. Author: Leszek Koltunski.</string>
+    <string name="solver_ivy_description" translatable="false">A perfect, instantaneous, tablebase-based Ivy Cube solver.\nAuthor: Leszek Koltunski.</string>
+    <string name="solver_cu232_title" translatable="false">2x2x3 Cuboid Solver</string>
+    <string name="solver_cu232_description" translatable="false">A perfect, instantaneous, tablebase-based 2x2x3 Cuboid solver.\nAuthor: Leszek Koltunski.</string>
 
     <string name="ns_placeholder" translatable="false">+%1$d</string>
     <string name="sq_placeholder" translatable="false">%1$2d.</string>
