commit 39061cb21aa6d8f57e8cc4ce8c190f3675d29d87
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Nov 10 14:03:40 2025 +0100

    Progress remembering ongoing solves.

diff --git a/src/main/java/org/distorted/dialogs/DialogAbandon.java b/src/main/java/org/distorted/dialogs/DialogAbandon.java
index 9590fbd0..ae1b9c4a 100644
--- a/src/main/java/org/distorted/dialogs/DialogAbandon.java
+++ b/src/main/java/org/distorted/dialogs/DialogAbandon.java
@@ -10,6 +10,7 @@
 package org.distorted.dialogs;
 
 import android.app.Dialog;
+import android.util.TypedValue;
 import android.view.View;
 import android.widget.TextView;
 
@@ -24,25 +25,40 @@ import org.distorted.play.ScreenList;
 public class DialogAbandon extends DialogAbstract
   {
   public int getResource()      { return R.layout.dialog_message; }
-  public int getTitleResource() { return -1; }
+  public int getTitleResource() { return R.string.abandon_solve; }
   public boolean hasArgument()  { return false; }
   public int getPositive()      { return R.string.yes; }
+  public int getNeutral()       { return R.string.cancel; }
   public int getNegative()      { return R.string.no; }
-  public void negativeAction()  { }
+  public void neutralAction()   { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public void positiveAction()
+  public void negativeAction()
     {
     final PlayActivity act = (PlayActivity)getContext();
     ScreenList.goBack(act);
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void positiveAction()
+    {
+    final PlayActivity act = (PlayActivity)getContext();
+
+    if( act!=null )
+      {
+      act.rememberSolve();
+      ScreenList.goBack(act);
+      }
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void prepareBody(Dialog dialog, View view, FragmentActivity act, float size)
     {
     TextView mess = view.findViewById(R.id.dialog_message);
-    mess.setText(R.string.abandon_solve);
+    mess.setText(R.string.come_back_later);
+    mess.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
     }
   }
diff --git a/src/main/java/org/distorted/dialogs/DialogAbout.java b/src/main/java/org/distorted/dialogs/DialogAbout.java
index 08244529..a1dc6e3b 100644
--- a/src/main/java/org/distorted/dialogs/DialogAbout.java
+++ b/src/main/java/org/distorted/dialogs/DialogAbout.java
@@ -68,9 +68,11 @@ public class DialogAbout extends DialogAbstract
   public int getTitleResource() { return PARAMETRIC_TITLE; }
   public boolean hasArgument()  { return true; }
   public int getPositive()      { return R.string.ok; }
+  public int getNeutral()       { return -1; }
   public int getNegative()      { return -1; }
   public void positiveAction()  { }
   public void negativeAction()  { }
+  public void neutralAction()   { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/java/org/distorted/dialogs/DialogAbstract.java b/src/main/java/org/distorted/dialogs/DialogAbstract.java
index 0ee73f92..5383f53f 100644
--- a/src/main/java/org/distorted/dialogs/DialogAbstract.java
+++ b/src/main/java/org/distorted/dialogs/DialogAbstract.java
@@ -14,15 +14,18 @@ import android.content.DialogInterface;
 import android.os.Bundle;
 import android.util.DisplayMetrics;
 import android.util.TypedValue;
+import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.Window;
 import android.widget.Button;
+import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import androidx.annotation.NonNull;
 import androidx.appcompat.app.AlertDialog;
 import androidx.appcompat.app.AppCompatDialogFragment;
+import androidx.core.content.ContextCompat;
 import androidx.fragment.app.FragmentActivity;
 
 import org.distorted.helpers.BaseActivity;
@@ -44,9 +47,11 @@ abstract public class DialogAbstract extends AppCompatDialogFragment
   abstract int getResource();
   abstract int getTitleResource();
   abstract int getPositive();
+  abstract int getNeutral();
   abstract int getNegative();
   abstract boolean hasArgument();
   abstract void positiveAction();
+  abstract void neutralAction();
   abstract void negativeAction();
   abstract void prepareBody(Dialog dialog, View view, FragmentActivity act, float size);
 
@@ -69,8 +74,16 @@ abstract public class DialogAbstract extends AppCompatDialogFragment
       {
       Button pos = dialog.getButton(Dialog.BUTTON_POSITIVE);
       if( pos!=null ) pos.setTextSize(TypedValue.COMPLEX_UNIT_PX, mButSize);
+
       Button neg = dialog.getButton(Dialog.BUTTON_NEGATIVE);
       if( neg!=null ) neg.setTextSize(TypedValue.COMPLEX_UNIT_PX, mButSize);
+
+      Button neu = dialog.getButton(Dialog.BUTTON_NEUTRAL);
+      if( neu!=null && getNeutral()>=0 )
+        {
+        neu.setTextSize(TypedValue.COMPLEX_UNIT_PX, mButSize);
+        neu.setTextColor(ContextCompat.getColor(requireContext(), android.R.color.white));
+        }
       }
     }
 
@@ -89,7 +102,7 @@ abstract public class DialogAbstract extends AppCompatDialogFragment
     mWidth    = displaymetrics.widthPixels;
     mHeight   = displaymetrics.heightPixels;
     mTitleSize= mHeight*0.032f;
-    mButSize  = mHeight*0.040f;
+    mButSize  = mHeight*0.035f;
     mTextSize = mHeight*0.025f;
 
     if( hasArgument() )
@@ -143,6 +156,19 @@ abstract public class DialogAbstract extends AppCompatDialogFragment
         });
       }
 
+    int neutral = getNeutral();
+    if( neutral>=0 )
+      {
+      builder.setNeutralButton( neutral, new DialogInterface.OnClickListener()
+        {
+        @Override
+        public void onClick(DialogInterface dialog, int which)
+          {
+          neutralAction();
+          }
+        });
+      }
+
     int negative = getNegative();
     if( negative>=0 )
       {
diff --git a/src/main/java/org/distorted/dialogs/DialogBandagedDelete.java b/src/main/java/org/distorted/dialogs/DialogBandagedDelete.java
index 1a1e9b0c..d94b93a1 100644
--- a/src/main/java/org/distorted/dialogs/DialogBandagedDelete.java
+++ b/src/main/java/org/distorted/dialogs/DialogBandagedDelete.java
@@ -27,8 +27,10 @@ public class DialogBandagedDelete extends DialogAbstract
   public int getTitleResource() { return R.string.delete_object; }
   public boolean hasArgument()  { return true; }
   public int getPositive()      { return R.string.yes; }
+  public int getNeutral()       { return -1; }
   public int getNegative()      { return R.string.no; }
   public void negativeAction()  { }
+  public void neutralAction()   { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/java/org/distorted/dialogs/DialogBandagedSave.java b/src/main/java/org/distorted/dialogs/DialogBandagedSave.java
index a7d3f011..72199159 100644
--- a/src/main/java/org/distorted/dialogs/DialogBandagedSave.java
+++ b/src/main/java/org/distorted/dialogs/DialogBandagedSave.java
@@ -28,7 +28,9 @@ public class DialogBandagedSave extends DialogAbstract
   public int getTitleResource() { return R.string.save_object; }
   public boolean hasArgument()  { return false; }
   public int getPositive()      { return R.string.yes; }
+  public int getNeutral()       { return -1; }
   public int getNegative()      { return R.string.no; }
+  public void neutralAction()   { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/java/org/distorted/dialogs/DialogCreators.java b/src/main/java/org/distorted/dialogs/DialogCreators.java
index 5997c77e..bab78caf 100644
--- a/src/main/java/org/distorted/dialogs/DialogCreators.java
+++ b/src/main/java/org/distorted/dialogs/DialogCreators.java
@@ -99,9 +99,11 @@ public class DialogCreators extends DialogAbstract
   public int getTitleResource()       { return R.string.creators; }
   public boolean hasArgument()        { return false; }
   public int getPositive()            { return R.string.ok; }
+  public int getNeutral()             { return -1; }
   public int getNegative()            { return -1; }
   public void positiveAction()        { }
   public void negativeAction()        { }
+  public void neutralAction()         { }
   public static String getDialogTag() { return "DialogCreators"; }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/dialogs/DialogError.java b/src/main/java/org/distorted/dialogs/DialogError.java
index 6ffcbd93..86ecd407 100644
--- a/src/main/java/org/distorted/dialogs/DialogError.java
+++ b/src/main/java/org/distorted/dialogs/DialogError.java
@@ -26,7 +26,10 @@ public class DialogError extends DialogAbstract
   public int getTitleResource() { return R.string.opengl_error; }
   public boolean hasArgument()  { return false; }
   public int getPositive()      { return R.string.ok; }
+  public int getNeutral()       { return -1; }
   public int getNegative()      { return -1; }
+  public void neutralAction()   { }
+  public void negativeAction()  { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -36,13 +39,6 @@ public class DialogError extends DialogAbstract
     if( act!=null ) act.finish();
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public void negativeAction()
-    {
-
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void prepareBody(Dialog dialog, View view, FragmentActivity act, float size)
diff --git a/src/main/java/org/distorted/dialogs/DialogExit.java b/src/main/java/org/distorted/dialogs/DialogExit.java
index 84aa09f9..2d0084bb 100644
--- a/src/main/java/org/distorted/dialogs/DialogExit.java
+++ b/src/main/java/org/distorted/dialogs/DialogExit.java
@@ -25,7 +25,9 @@ public class DialogExit extends DialogAbstract
   public int getTitleResource() { return -1; }
   public boolean hasArgument()  { return false; }
   public int getPositive()      { return R.string.yes; }
+  public int getNeutral()       { return -1; }
   public int getNegative()      { return R.string.no; }
+  public void neutralAction()   { }
   public void negativeAction()  { }
   public void prepareBody(Dialog dialog, View view, FragmentActivity act, float size) { }
 
diff --git a/src/main/java/org/distorted/dialogs/DialogInterrupt.java b/src/main/java/org/distorted/dialogs/DialogInterrupt.java
index f73e5939..b9f0c0c7 100644
--- a/src/main/java/org/distorted/dialogs/DialogInterrupt.java
+++ b/src/main/java/org/distorted/dialogs/DialogInterrupt.java
@@ -26,7 +26,9 @@ public class DialogInterrupt extends DialogAbstract
   public int getTitleResource()       { return -1; }
   public boolean hasArgument()        { return false; }
   public int getPositive()            { return R.string.interrupt; }
+  public int getNeutral()             { return -1; }
   public int getNegative()            { return -1; }
+  public void neutralAction()         { }
   public void negativeAction()        { }
   public static String getDialogTag() { return "DialogInterrupt"; }
 
diff --git a/src/main/java/org/distorted/dialogs/DialogMessage.java b/src/main/java/org/distorted/dialogs/DialogMessage.java
index eaa0cdec..b003c14d 100644
--- a/src/main/java/org/distorted/dialogs/DialogMessage.java
+++ b/src/main/java/org/distorted/dialogs/DialogMessage.java
@@ -25,8 +25,10 @@ public class DialogMessage extends DialogAbstract
   public int getTitleResource()       { return -1; }
   public boolean hasArgument()        { return true; }
   public int getPositive()            { return R.string.ok; }
+  public int getNeutral()             { return -1; }
   public int getNegative()            { return -1; }
   public void negativeAction()        { }
+  public void neutralAction()         { }
   public void positiveAction()        { }
   public static String getDialogTag() { return "DialogBandageMessage"; }
 
@@ -37,5 +39,4 @@ public class DialogMessage extends DialogAbstract
     TextView mess = view.findViewById(R.id.dialog_message);
     mess.setText(mArgument);
     }
-
   }
diff --git a/src/main/java/org/distorted/dialogs/DialogNewRecord.java b/src/main/java/org/distorted/dialogs/DialogNewRecord.java
index a84cf397..c6c1c9c9 100644
--- a/src/main/java/org/distorted/dialogs/DialogNewRecord.java
+++ b/src/main/java/org/distorted/dialogs/DialogNewRecord.java
@@ -29,7 +29,9 @@ public class DialogNewRecord extends DialogAbstract
   public int getTitleResource() { return R.string.new_record; }
   public boolean hasArgument()  { return true; }
   public int getPositive()      { return R.string.yes; }
+  public int getNeutral()       { return -1; }
   public int getNegative()      { return R.string.no; }
+  public void neutralAction()   { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/java/org/distorted/dialogs/DialogPattern.java b/src/main/java/org/distorted/dialogs/DialogPattern.java
index a797de8c..a384af91 100644
--- a/src/main/java/org/distorted/dialogs/DialogPattern.java
+++ b/src/main/java/org/distorted/dialogs/DialogPattern.java
@@ -60,9 +60,11 @@ public class DialogPattern extends DialogAbstract
   public int getTitleResource() { return R.string.choose_pattern; }
   public boolean hasArgument()  { return true; }
   public int getPositive()      { return -1; }
+  public int getNeutral()       { return -1; }
   public int getNegative()      { return -1; }
   public void positiveAction()  { }
   public void negativeAction()  { }
+  public void neutralAction()   { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/java/org/distorted/dialogs/DialogScores.java b/src/main/java/org/distorted/dialogs/DialogScores.java
index dd5900a3..50775c2e 100644
--- a/src/main/java/org/distorted/dialogs/DialogScores.java
+++ b/src/main/java/org/distorted/dialogs/DialogScores.java
@@ -62,8 +62,10 @@ public class DialogScores extends DialogAbstract
   public int getTitleResource() { return R.string.scores; }
   public boolean hasArgument()  { return true; }
   public int getPositive()      { return R.string.ok; }
+  public int getNeutral()       { return -1; }
   public int getNegative()      { return -1; }
   public void positiveAction()  { DialogScoresThread.getInstance().exit(); }
+  public void neutralAction()   { }
   public void negativeAction()  { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/dialogs/DialogSetName.java b/src/main/java/org/distorted/dialogs/DialogSetName.java
index cddf73e0..ec440c29 100644
--- a/src/main/java/org/distorted/dialogs/DialogSetName.java
+++ b/src/main/java/org/distorted/dialogs/DialogSetName.java
@@ -60,7 +60,9 @@ public class DialogSetName extends DialogAbstract
   public int getTitleResource() { return mArgument.isEmpty() ? R.string.choose_name : R.string.name_taken; }
   public boolean hasArgument()  { return true; }
   public int getPositive()      { return R.string.ok; }
+  public int getNeutral()       { return -1; }
   public int getNegative()      { return -1; }
+  public void neutralAction()   { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/java/org/distorted/dialogs/DialogSolved.java b/src/main/java/org/distorted/dialogs/DialogSolved.java
index 98d8d218..b683d8c7 100644
--- a/src/main/java/org/distorted/dialogs/DialogSolved.java
+++ b/src/main/java/org/distorted/dialogs/DialogSolved.java
@@ -27,7 +27,9 @@ public class DialogSolved extends DialogAbstract
   public int getTitleResource() { return R.string.solved; }
   public boolean hasArgument()  { return true; }
   public int getPositive()      { return R.string.ok; }
+  public int getNeutral()       { return -1; }
   public int getNegative()      { return -1; }
+  public void neutralAction()   { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/java/org/distorted/dialogs/DialogSolverError.java b/src/main/java/org/distorted/dialogs/DialogSolverError.java
index b7988271..cbff7b76 100644
--- a/src/main/java/org/distorted/dialogs/DialogSolverError.java
+++ b/src/main/java/org/distorted/dialogs/DialogSolverError.java
@@ -26,9 +26,11 @@ public class DialogSolverError extends DialogAbstract
   public int getTitleResource() { return R.string.error; }
   public boolean hasArgument()  { return true; }
   public int getPositive()      { return R.string.ok; }
+  public int getNeutral()       { return -1; }
   public int getNegative()      { return -1; }
   public void positiveAction()  { }
   public void negativeAction()  { }
+  public void neutralAction()   { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/java/org/distorted/dialogs/DialogSolverImpossible.java b/src/main/java/org/distorted/dialogs/DialogSolverImpossible.java
index 23934070..473050b0 100644
--- a/src/main/java/org/distorted/dialogs/DialogSolverImpossible.java
+++ b/src/main/java/org/distorted/dialogs/DialogSolverImpossible.java
@@ -26,9 +26,11 @@ public class DialogSolverImpossible extends DialogAbstract
   public int getTitleResource() { return R.string.impossible_position; }
   public boolean hasArgument()  { return true; }
   public int getPositive()      { return R.string.ok; }
+  public int getNeutral()       { return -1; }
   public int getNegative()      { return -1; }
   public void positiveAction()  { }
   public void negativeAction()  { }
+  public void neutralAction()   { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/java/org/distorted/dialogs/DialogSolvers.java b/src/main/java/org/distorted/dialogs/DialogSolvers.java
index a8e0588b..ec2f7d01 100644
--- a/src/main/java/org/distorted/dialogs/DialogSolvers.java
+++ b/src/main/java/org/distorted/dialogs/DialogSolvers.java
@@ -50,10 +50,12 @@ public class DialogSolvers extends DialogAbstract
   public int getTitleResource()       { return R.string.solvers; }
   public boolean hasArgument()        { return true; }
   public int getPositive()            { return -1; }
+  public int getNeutral()             { return -1; }
   public int getNegative()            { return -1; }
   public static String getDialogTag() { return "DialogSolvers"; }
   public void positiveAction()        { }
   public void negativeAction()        { }
+  public void neutralAction()         { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/java/org/distorted/dialogs/DialogTutorial.java b/src/main/java/org/distorted/dialogs/DialogTutorial.java
index 220210de..a13f2283 100644
--- a/src/main/java/org/distorted/dialogs/DialogTutorial.java
+++ b/src/main/java/org/distorted/dialogs/DialogTutorial.java
@@ -67,9 +67,11 @@ public class DialogTutorial extends DialogAbstract
   public int getTitleResource() { return R.string.tutorials; }
   public boolean hasArgument()  { return true; }
   public int getPositive()      { return -1; }
+  public int getNeutral()       { return -1; }
   public int getNegative()      { return -1; }
   public void positiveAction()  { }
   public void negativeAction()  { }
+  public void neutralAction()   { }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/java/org/distorted/dialogs/DialogUpdates.java b/src/main/java/org/distorted/dialogs/DialogUpdates.java
index 562a2ad9..4edb0225 100644
--- a/src/main/java/org/distorted/dialogs/DialogUpdates.java
+++ b/src/main/java/org/distorted/dialogs/DialogUpdates.java
@@ -80,9 +80,11 @@ public class DialogUpdates extends DialogAbstract implements RubikNetwork.IconRe
   public int getTitleResource()       { return R.string.updates; }
   public boolean hasArgument()        { return false; }
   public int getPositive()            { return R.string.ok; }
+  public int getNeutral()             { return -1; }
   public int getNegative()            { return -1; }
   public void positiveAction()        { }
   public void negativeAction()        { }
+  public void neutralAction()         { }
   public static String getDialogTag() { return "DialogUpdates"; }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/play/PlayActivity.java b/src/main/java/org/distorted/play/PlayActivity.java
index c70a7517..6aa3366c 100644
--- a/src/main/java/org/distorted/play/PlayActivity.java
+++ b/src/main/java/org/distorted/play/PlayActivity.java
@@ -296,6 +296,13 @@ public class PlayActivity extends BaseActivity implements DialogScores.ScoresInv
       return mObjectOrdinal;
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void rememberSolve()
+      {
+      android.util.Log.e("D", "REMEMBER!");
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public ObjectControl getControl()
diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml
index b29783e9..1772c3af 100755
--- a/src/main/res/values-de/strings.xml
+++ b/src/main/res/values-de/strings.xml
@@ -14,6 +14,7 @@
     <string name="ok">OK</string>
     <string name="yes">JA</string>
     <string name="no">NEIN</string>
+    <string name="cancel">Abbrechen</string>
     <string name="you">SIE</string>
     <string name="solution">Lösung</string>
     <string name="ready">Bereit?</string>
@@ -48,7 +49,8 @@
     <string name="updates">Aktualisierungen</string>
     <string name="no_updates">Nicht gefunden</string>
     <string name="install">Installieren</string>
-    <string name="abandon_solve">Give up</string>
+    <string name="abandon_solve">Merke diese Lösung</string>
+    <string name="come_back_later">Wenn ja, können Sie später fortfahren.</string>
     <string name="use_solver">Verwenden</string>
     <string name="whatsnew">Was gibt\'s Neues</string>
     <string name="share">Teilen Sie diese App</string>
diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml
index e09bc914..617c21dd 100755
--- a/src/main/res/values-es/strings.xml
+++ b/src/main/res/values-es/strings.xml
@@ -14,6 +14,7 @@
     <string name="ok">Aceptar</string>
     <string name="yes">SÍ</string>
     <string name="no">NO</string>
+    <string name="cancel">Cancelar</string>
     <string name="you">TÚ</string>
     <string name="solution">Solución</string>
     <string name="ready">¿Listo?</string>
@@ -48,7 +49,8 @@
     <string name="updates">Actualizaciones</string>
     <string name="no_updates">Extraviado</string>
     <string name="install">Instalar</string>
-    <string name="abandon_solve">Abandonar</string>
+    <string name="abandon_solve">Recuerda esta solución</string>
+    <string name="come_back_later">Si es así, podrás reanudarlo más tarde.</string>
     <string name="use_solver">Usar</string>
     <string name="whatsnew">Qué hay de nuevo</string>
     <string name="share">Comparte esta app</string>
diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml
index e6d8fad4..270febe0 100755
--- a/src/main/res/values-fr/strings.xml
+++ b/src/main/res/values-fr/strings.xml
@@ -14,6 +14,7 @@
     <string name="ok">D\'accord</string>
     <string name="yes">OUI</string>
     <string name="no">NON</string>
+    <string name="cancel">Annuler</string>
     <string name="you">VOUS</string>
     <string name="solution">Solution</string>
     <string name="ready">Prêt ?</string>
@@ -48,7 +49,7 @@
     <string name="updates">Mises à jour</string>
     <string name="no_updates">Pas trouvé</string>
     <string name="install">Installer</string>
-    <string name="abandon_solve">Abandonner</string>
+    <string name="come_back_later">Si oui, vous pourrez le reprendre plus tard.</string>
     <string name="use_solver">Utiliser</string>
     <string name="whatsnew">Quoi de neuf</string>
     <string name="share">Partager cette app</string>
@@ -260,5 +261,6 @@
     <string name="lv_placeholder">Niveau %1$d</string>
     <string name="ti_placeholder">%1$s secondes</string>
     <string name="ab_placeholder">À propos de %1$s</string>
+    <string name="abandon_solve">Souvenez-vous de cette solution</string>
 
 </resources>
diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml
index 994c8970..4f950012 100755
--- a/src/main/res/values-ja/strings.xml
+++ b/src/main/res/values-ja/strings.xml
@@ -14,6 +14,7 @@
     <string name="ok">OK</string>
     <string name="yes">はい</string>
     <string name="no">いいえ</string>
+    <string name="cancel">キャンセル</string>
     <string name="you">あなた</string>
     <string name="solution">解答</string>
     <string name="ready">準備はいいですか？</string>
@@ -48,7 +49,8 @@
     <string name="updates">更新</string>
     <string name="no_updates">見つかりません</string>
     <string name="install">インストール</string>
-    <string name="abandon_solve">あきらめる</string>
+    <string name="abandon_solve">この解決策を覚えておいて</string>
+    <string name="come_back_later">はい、後で再開できます。</string>
     <string name="use_solver">使用</string>
     <string name="whatsnew">新着情報</string>
     <string name="share">このアプリを共有する</string>
diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml
index 8b3ded04..fa283efe 100755
--- a/src/main/res/values-ko/strings.xml
+++ b/src/main/res/values-ko/strings.xml
@@ -14,6 +14,7 @@
     <string name="ok">확인</string>
     <string name="yes">예</string>
     <string name="no">아니요</string>
+    <string name="cancel">취소</string>
     <string name="you">나</string>
     <string name="solution">해결</string>
     <string name="ready">준비되셨나요?</string>
@@ -48,7 +49,8 @@
     <string name="updates">업데이트</string>
     <string name="no_updates">업데이트가 없습니다</string>
     <string name="install">설치</string>
-    <string name="abandon_solve">포기</string>
+    <string name="abandon_solve">이 해결책을 기억하세요</string>
+    <string name="come_back_later">그렇다면, 나중에 다시 시작할 수 있습니다.</string>
     <string name="use_solver">사용</string>
     <string name="whatsnew">새로운 기능</string>
     <string name="share">이 애플리케이션 공유</string>
diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml
index 5becb5c2..5d911ac1 100644
--- a/src/main/res/values-pl/strings.xml
+++ b/src/main/res/values-pl/strings.xml
@@ -14,6 +14,7 @@
     <string name="ok">OK</string>
     <string name="yes">TAK</string>
     <string name="no">NIE</string>
+    <string name="cancel">Anuluj</string>
     <string name="you">TY</string>
     <string name="solution">Rozwiązanie</string>
     <string name="ready">Gotowy?</string>
@@ -48,7 +49,8 @@
     <string name="updates">Aktualizacje</string>
     <string name="no_updates">Nie znaleziono</string>
     <string name="install">Zainstaluj</string>
-    <string name="abandon_solve">Zrezygnuj</string>
+    <string name="abandon_solve">Zapamiętaj to rozwiązanie</string>
+    <string name="come_back_later">Jeśli zapamiętasz, będziesz mógł wrócić do niego później.</string>
     <string name="use_solver">Użyj</string>
     <string name="whatsnew">Nowości</string>
     <string name="share">Udostępnij tę apkę</string>
diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml
index 14ff3193..66e72b4e 100755
--- a/src/main/res/values-ru/strings.xml
+++ b/src/main/res/values-ru/strings.xml
@@ -14,6 +14,7 @@
     <string name="ok">ОК</string>
     <string name="yes">ДА</string>
     <string name="no">НЕТ</string>
+    <string name="cancel">Отмена</string>
     <string name="you">ВЫ</string>
     <string name="solution">Решение</string>
     <string name="ready">Готовы?</string>
@@ -48,7 +49,8 @@
     <string name="updates">Обновления</string>
     <string name="no_updates">Не найдено</string>
     <string name="install">Установите</string>
-    <string name="abandon_solve">Сдаться</string>
+    <string name="abandon_solve">Запомните это решение</string>
+    <string name="come_back_later">Если да, вы сможете возобновить его позже.</string>
     <string name="use_solver">Использовай</string>
     <string name="whatsnew">Новинки</string>
     <string name="share">Поделись этим</string>
diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml
index 1a7e5dfc..eb49410c 100644
--- a/src/main/res/values-zh-rCN/strings.xml
+++ b/src/main/res/values-zh-rCN/strings.xml
@@ -14,6 +14,7 @@
     <string name="ok">确定</string>
     <string name="yes">是</string>
     <string name="no">否</string>
+    <string name="cancel">取消</string>
     <string name="you">你</string>
     <string name="solution">解决方案</string>
     <string name="ready">准备就绪？</string>
@@ -48,7 +49,7 @@
     <string name="updates">更新</string>
     <string name="no_updates">未找到更新</string>
     <string name="install">安装</string>
-    <string name="abandon_solve">放弃</string>
+    <string name="come_back_later">如果可以，您稍后就能继续。</string>
     <string name="use_solver">使用</string>
     <string name="whatsnew">新奇事物</string>
     <string name="share">分享这个应用程序</string>
@@ -266,4 +267,5 @@
     <string name="lv_placeholder">%1$d级</string>
     <string name="ti_placeholder">%1$s 秒</string>
     <string name="ab_placeholder">关于版本 %1$s</string>
+    <string name="abandon_solve">记住这个解法</string>
 </resources>
diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml
index 8eedd36a..d5523c7e 100644
--- a/src/main/res/values-zh-rTW/strings.xml
+++ b/src/main/res/values-zh-rTW/strings.xml
@@ -14,6 +14,7 @@
     <string name="ok">確認</string>
     <string name="yes">是</string>
     <string name="no">否</string>
+    <string name="cancel">取消</string>
     <string name="you">你</string>
     <string name="solution">解决方案</string>
     <string name="ready">準備好了？</string>
@@ -48,7 +49,7 @@
     <string name="updates">更新</string>
     <string name="no_updates">未找到更新</string>
     <string name="install">安裝</string>
-    <string name="abandon_solve">放棄</string>
+    <string name="come_back_later">若答案為是，您稍後將可繼續進行。</string>
     <string name="use_solver">使用</string>
     <string name="whatsnew">新奇事物</string>
     <string name="share">分享這個應用程序</string>
@@ -260,5 +261,6 @@
     <string name="lv_placeholder">%1$d級</string>
     <string name="ti_placeholder">%1$s 秒</string>
     <string name="ab_placeholder">關於版本 %1$s</string>
+    <string name="abandon_solve">記住這個解法</string>
 
 </resources>
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index a932c868..8c60b070 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -16,6 +16,7 @@
     <string name="ok">OK</string>
     <string name="yes">YES</string>
     <string name="no">NO</string>
+    <string name="cancel">Cancel</string>
     <string name="you">YOU</string>
     <string name="solution">Solution</string>
     <string name="ready">Ready?</string>
@@ -50,7 +51,8 @@
     <string name="updates">Updates</string>
     <string name="no_updates">No update found</string>
     <string name="install">Install</string>
-    <string name="abandon_solve">Give up</string>
+    <string name="abandon_solve">Remember this solve</string>
+    <string name="come_back_later">If yes, you will be able to resume it later.</string>
     <string name="use_solver">Use</string>
     <string name="whatsnew">What\'s new</string>
     <string name="share">Share this app</string>
