commit 34d6b123264d362c0f6740c11fc114cfc04573f9
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Jan 30 13:29:58 2023 +0100

    What's New dialog: improvements.
    Remove the About dialog.

diff --git a/src/main/java/org/distorted/dialogs/RubikDialogAbout.java b/src/main/java/org/distorted/dialogs/RubikDialogAbout.java
deleted file mode 100644
index 9d88c306..00000000
--- a/src/main/java/org/distorted/dialogs/RubikDialogAbout.java
+++ /dev/null
@@ -1,91 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Copyright 2019 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.dialogs;
-
-import android.app.Dialog;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import androidx.fragment.app.FragmentActivity;
-
-import android.text.method.LinkMovementMethod;
-import android.text.method.MovementMethod;
-import android.util.TypedValue;
-import android.view.View;
-import android.widget.TextView;
-
-import org.distorted.main.R;
-import org.distorted.main.RubikActivity;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-public class RubikDialogAbout extends RubikDialogAbstract
-  {
-  public int getResource()      { return R.layout.dialog_about; }
-  public int getTitleResource() { return R.string.about; }
-  public boolean hasArgument()  { return false; }
-  public int getPositive()      { return R.string.ok; }
-  public int getNegative()      { return -1; }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void positiveAction()
-    {
-
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void negativeAction()
-    {
-
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void prepareBody(Dialog dialog, View view, FragmentActivity act, float size)
-    {
-    TextView text = view.findViewById(R.id.about_version);
-    String appName = getString(R.string.app_name);
-
-    text.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
-
-    String version;
-    try
-      {
-      PackageInfo pInfo = act.getPackageManager().getPackageInfo( act.getPackageName(), 0);
-      version= pInfo.versionName;
-      }
-    catch (PackageManager.NameNotFoundException e)
-      {
-      version= "unknown";
-      }
-
-    text.setText(getString(R.string.ap_placeholder,appName, version));
-
-    MovementMethod mm = LinkMovementMethod.getInstance();
-    TextView text2 = view.findViewById(R.id.about_section2);
-    text2.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
-    text2.setMovementMethod(mm);
-    TextView text3 = view.findViewById(R.id.about_section3);
-    text3.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
-
-    TextView text4 = view.findViewById(R.id.about_section4);
-
-    if( RubikActivity.localeIsChinese() )
-      {
-      text4.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
-      text4.setMovementMethod(mm);
-      }
-    else
-      {
-      text4.setVisibility(View.GONE);
-      }
-    }
-  }
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogSolvers.java b/src/main/java/org/distorted/dialogs/RubikDialogSolvers.java
index 0292bc7b..8d2e3c0d 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogSolvers.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogSolvers.java
@@ -68,8 +68,6 @@ public class RubikDialogSolvers extends RubikDialogAbstract
   public void prepareBody(Dialog dialog, View view, FragmentActivity act, float size)
     {
     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);
 
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogWhatsNew.java b/src/main/java/org/distorted/dialogs/RubikDialogWhatsNew.java
index 795909b6..5c5a81f6 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogWhatsNew.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogWhatsNew.java
@@ -10,6 +10,8 @@
 package org.distorted.dialogs;
 
 import android.app.Dialog;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
 import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
@@ -27,18 +29,22 @@ public class RubikDialogWhatsNew extends RubikDialogAbstract
   {
   private static final String[] MESSAGES =
       {
-      "1.11.6",
+      "1.12.0",
 
       "1. This dialog :)\n" +
       "2. UI ready for NEW SOLVERS\n" +
       "3. Important fix for a bug which used to let players solve any scramble with just one move\n" +
-      "4. UI fixes for squarish screens\n" +
-      "5. Preparation for Penrose Cubes.\n",
+      "4. Support for curved walls of cubies (preparation for Penrose Cubes)\n" +
+      "5. Support for scrambling algorithms (preparation for AI Cube & Camouflage Cubes)",
 
-      "current",
-      };
+      "Coming",
 
-  private int mLowerVersion, mUpperVersion;
+      "1. Implemented Pyraminx, Ivy, 2x2x3, Skewb Diamond solvers.\n" +
+      "2. More solvers (2x2x2?)\n" +
+      "2. Support for adjustable stickers.\n" +
+      "3. In-game currency (stars)\n" +
+      "4. More objects (Camouflage Cubes, AI Cube, Burr Cube, Penrose Cubes, the Double-Crazy)"
+      };
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -92,38 +98,45 @@ public class RubikDialogWhatsNew extends RubikDialogAbstract
     text.setVisibility(View.GONE);
 
     LinearLayout.LayoutParams pV = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT );
-    pV.setMargins(margin, margin, margin, margin);
+    pV.setMargins(margin, margin, margin, 0);
     LinearLayout.LayoutParams pL = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT );
     pL.setMargins(margin, margin, margin, margin);
     LinearLayout.LayoutParams pT = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, titleH );
     LinearLayout.LayoutParams pM = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT );
     pM.setMargins(0,2*margin,0,0);
 
-    parseArgument(mArgument);
     RubikActivity ract = (RubikActivity) getContext();
+    int start      = findVersion(mArgument);
+    int numMessages= MESSAGES.length/2;
+    String thisVersion = findCurrentVersion(ract);
 
-    for(int i=mLowerVersion; i<mUpperVersion; i+=2)
+    for(int i=0; i<numMessages; i++)
       {
-      String lower   = MESSAGES[i];
-      String message = MESSAGES[i+1];
-      String upper   = MESSAGES[i+2];
+      String version = MESSAGES[start+2*i];
+      String message = MESSAGES[start+2*i+1];
+      boolean isCurrent = version.equals(thisVersion);
 
-      RubikDialogWhatsNewView pane = new RubikDialogWhatsNewView(ract,lower,upper,message,padd,(i==mUpperVersion-1 ? pL:pV),pT,pM);
+      RubikDialogWhatsNewView pane = new RubikDialogWhatsNewView(ract,version,message,padd, isCurrent, (i==(numMessages-1) ? pL:pV),pT,pM);
       layout.addView(pane.getView());
       }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private void parseArgument(String argument)
+  private String findCurrentVersion(RubikActivity act)
     {
-    String[] parts = argument.split(" ");
-
-    if( parts.length==2 )
+    String version;
+    try
       {
-      mLowerVersion = findVersion(parts[0]);
-      mUpperVersion = findVersion(parts[1]);
+      PackageInfo pInfo = act.getPackageManager().getPackageInfo( act.getPackageName(), 0);
+      version= pInfo.versionName;
       }
+    catch (PackageManager.NameNotFoundException e)
+      {
+      version= "unknown";
+      }
+
+    return version;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -137,7 +150,7 @@ public class RubikDialogWhatsNew extends RubikDialogAbstract
       if( MESSAGES[i].equals(version) ) return i;
       }
 
-    return len-1;
+    return 0;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogWhatsNewView.java b/src/main/java/org/distorted/dialogs/RubikDialogWhatsNewView.java
index ae79fd7d..f52ea347 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogWhatsNewView.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogWhatsNewView.java
@@ -24,7 +24,7 @@ public class RubikDialogWhatsNewView
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public RubikDialogWhatsNewView(final RubikActivity act, String lower, String upper, String message, int padding,
+  public RubikDialogWhatsNewView(final RubikActivity act, String version, String message, int padding, boolean isCurrent,
                                  LinearLayout.LayoutParams pView, LinearLayout.LayoutParams pTitle, LinearLayout.LayoutParams pMessage )
     {
     mView = act.getLayoutInflater().inflate(R.layout.dialog_whatsnew_pane, null);
@@ -32,7 +32,7 @@ public class RubikDialogWhatsNewView
     mView.setPadding(padding,padding,padding,padding);
 
     TextView titleView = mView.findViewById(R.id.whatsnew_pane_title);
-    titleView.setText(lower+" -> "+upper);
+    titleView.setText( isCurrent ? act.getString(R.string.tv_placeholder,version) : version );
     titleView.setLayoutParams(pTitle);
 
     TextView messView = mView.findViewById(R.id.whatsnew_pane_message);
diff --git a/src/main/java/org/distorted/main/RubikActivity.java b/src/main/java/org/distorted/main/RubikActivity.java
index 07541aae..b2036fc5 100644
--- a/src/main/java/org/distorted/main/RubikActivity.java
+++ b/src/main/java/org/distorted/main/RubikActivity.java
@@ -298,7 +298,7 @@ public class RubikActivity extends AppCompatActivity
     private void displayNovelties()
       {
       Bundle bundle = new Bundle();
-      bundle.putString("argument",mOldVersion+" "+mCurrVersion);
+      bundle.putString("argument",mOldVersion);
       RubikDialogWhatsNew newDialog = new RubikDialogWhatsNew();
       newDialog.setArguments(bundle);
       newDialog.show(getSupportFragmentManager(), RubikDialogWhatsNew.getDialogTag() );
diff --git a/src/main/java/org/distorted/screens/RubikScreenPlay.java b/src/main/java/org/distorted/screens/RubikScreenPlay.java
index eff0cc1c..683b416c 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPlay.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPlay.java
@@ -33,6 +33,7 @@ import android.widget.TextView;
 import org.distorted.dialogs.RubikDialogSolvers;
 import org.distorted.dialogs.RubikDialogStarsStatus;
 import org.distorted.dialogs.RubikDialogUpdates;
+import org.distorted.dialogs.RubikDialogWhatsNew;
 import org.distorted.external.RubikNetwork;
 import org.distorted.external.RubikScores;
 import org.distorted.external.RubikUpdates;
@@ -40,7 +41,6 @@ import org.distorted.external.RubikUpdates;
 import org.distorted.helpers.PopupCreator;
 import org.distorted.main.R;
 import org.distorted.main.RubikActivity;
-import org.distorted.dialogs.RubikDialogAbout;
 import org.distorted.dialogs.RubikDialogPattern;
 import org.distorted.dialogs.RubikDialogScores;
 import org.distorted.dialogs.RubikDialogTutorial;
@@ -447,15 +447,15 @@ public class RubikScreenPlay extends RubikScreenBase implements RubikNetwork.Upd
           }
         });
 
-    Button about = layout.findViewById(R.id.menuAbout);
-    about.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
-    about.setOnClickListener( new View.OnClickListener()
+    Button whatsNew = layout.findViewById(R.id.menuNew);
+    whatsNew.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
+    whatsNew.setOnClickListener( new View.OnClickListener()
         {
         @Override
         public void onClick(View v)
           {
           mMenuPopup.dismiss();
-          RubikDialogAbout aDiag = new RubikDialogAbout();
+          RubikDialogWhatsNew aDiag = new RubikDialogWhatsNew();
           aDiag.show(act.getSupportFragmentManager(), null);
           }
         });
diff --git a/src/main/res/layout/popup_menu.xml b/src/main/res/layout/popup_menu.xml
index cac8e863..7d757599 100644
--- a/src/main/res/layout/popup_menu.xml
+++ b/src/main/res/layout/popup_menu.xml
@@ -79,8 +79,8 @@
       android:gravity="center"/>
 
    <Button
-      android:id="@+id/menuAbout"
-      android:text="@string/about"
+      android:id="@+id/menuNew"
+      android:text="@string/whatsnew"
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:layout_weight="1.0"
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index ef369a27..597ce653 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -138,5 +138,6 @@
     <string name="ms_placeholder">%1$d ms</string>
     <string name="lv_placeholder">Level %1$d</string>
     <string name="ti_placeholder">%1$s seconds</string>
+    <string name="tv_placeholder">This version (%1$s)</string>
 
 </resources>
