commit 4d6327a13ae38bfedb046b840b3aad0e1fbadae6
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Jan 4 15:35:15 2023 +0100

    Dialog 'buy stars'

diff --git a/src/main/java/org/distorted/dialogs/RubikDialogStarsError.java b/src/main/java/org/distorted/dialogs/RubikDialogStarsError.java
deleted file mode 100644
index 77ef8aa1..00000000
--- a/src/main/java/org/distorted/dialogs/RubikDialogStarsError.java
+++ /dev/null
@@ -1,92 +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.dialogs;
-
-import android.app.Dialog;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.util.DisplayMetrics;
-import android.util.TypedValue;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.Window;
-import android.widget.Button;
-
-import androidx.annotation.NonNull;
-import androidx.appcompat.app.AlertDialog;
-import androidx.appcompat.app.AppCompatDialogFragment;
-import androidx.fragment.app.FragmentActivity;
-
-import org.distorted.main.R;
-import org.distorted.main.RubikActivity;
-import org.distorted.purchase.PurchaseScreenPane;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-public class RubikDialogStarsError extends AppCompatDialogFragment
-  {
-  @NonNull
-  @Override
-  public Dialog onCreateDialog(Bundle savedInstanceState)
-    {
-    FragmentActivity act = getActivity();
-    LayoutInflater inflater = act.getLayoutInflater();
-    AlertDialog.Builder builder = new AlertDialog.Builder(act);
-    DisplayMetrics displaymetrics = new DisplayMetrics();
-    act.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
-    final float butSize = displaymetrics.widthPixels * RubikActivity.DIALOG_BUTTON_SIZE;
-    final View view = inflater.inflate(R.layout.dialog_stars_error, null);
-
-    Bundle args = getArguments();
-    long price;
-
-    try
-      {
-      price = args.getInt("price");
-      }
-    catch(Exception e)
-      {
-      price = PurchaseScreenPane.UNLOCK_ALL_PRICE;
-      }
-
-    builder.setCancelable(true);
-
-    builder.setPositiveButton( R.string.ok, new DialogInterface.OnClickListener()
-      {
-      @Override
-      public void onClick(DialogInterface dialog, int which) { }
-      });
-
-    builder.setView(view);
-
-    final Dialog dialog = builder.create();
-    dialog.setCanceledOnTouchOutside(false);
-    Window window = dialog.getWindow();
-
-    if( window!=null )
-      {
-      window.getDecorView().setSystemUiVisibility(RubikActivity.FLAGS);
-      }
-
-    dialog.setOnShowListener(new DialogInterface.OnShowListener()
-      {
-      @Override
-      public void onShow(DialogInterface dialog)
-        {
-        Button btnPositive = ((AlertDialog)dialog).getButton(Dialog.BUTTON_POSITIVE);
-        btnPositive.setTextSize(TypedValue.COMPLEX_UNIT_PX, butSize);
-        Button btnNegative = ((AlertDialog)dialog).getButton(Dialog.BUTTON_NEGATIVE);
-        btnNegative.setTextSize(TypedValue.COMPLEX_UNIT_PX, butSize);
-        }
-      });
-
-    return dialog;
-    }
-  }
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogStarsExplain.java b/src/main/java/org/distorted/dialogs/RubikDialogStarsExplain.java
index e67e6ff2..16374c33 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogStarsExplain.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogStarsExplain.java
@@ -69,8 +69,6 @@ public class RubikDialogStarsExplain extends AppCompatDialogFragment
         {
         Button btnPositive = ((AlertDialog)dialog).getButton(Dialog.BUTTON_POSITIVE);
         btnPositive.setTextSize(TypedValue.COMPLEX_UNIT_PX, butSize);
-        Button btnNegative = ((AlertDialog)dialog).getButton(Dialog.BUTTON_NEGATIVE);
-        btnNegative.setTextSize(TypedValue.COMPLEX_UNIT_PX, butSize);
         }
       });
 
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogStarsStatus.java b/src/main/java/org/distorted/dialogs/RubikDialogStarsStatus.java
new file mode 100644
index 00000000..dd3fef66
--- /dev/null
+++ b/src/main/java/org/distorted/dialogs/RubikDialogStarsStatus.java
@@ -0,0 +1,90 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// 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.dialogs;
+
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.util.DisplayMetrics;
+import android.util.TypedValue;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatDialogFragment;
+import androidx.fragment.app.FragmentActivity;
+
+import org.distorted.external.RubikScores;
+import org.distorted.main.R;
+import org.distorted.main.RubikActivity;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class RubikDialogStarsStatus extends AppCompatDialogFragment
+  {
+  @NonNull
+  @Override
+  public Dialog onCreateDialog(Bundle savedInstanceState)
+    {
+    FragmentActivity act = getActivity();
+    LayoutInflater inflater = act.getLayoutInflater();
+    AlertDialog.Builder builder = new AlertDialog.Builder(act);
+    DisplayMetrics displaymetrics = new DisplayMetrics();
+    act.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
+    final float butSize = displaymetrics.widthPixels * RubikActivity.DIALOG_BUTTON_SIZE;
+    final View view = inflater.inflate(R.layout.dialog_stars_status, null);
+
+    fillUpNumberOfStars(view);
+
+    builder.setCancelable(true);
+
+    builder.setPositiveButton( R.string.ok, new DialogInterface.OnClickListener()
+      {
+      @Override
+      public void onClick(DialogInterface dialog, int which) { }
+      });
+
+    builder.setView(view);
+
+    final Dialog dialog = builder.create();
+    dialog.setCanceledOnTouchOutside(false);
+    Window window = dialog.getWindow();
+
+    if( window!=null )
+      {
+      window.getDecorView().setSystemUiVisibility(RubikActivity.FLAGS);
+      }
+
+    dialog.setOnShowListener(new DialogInterface.OnShowListener()
+      {
+      @Override
+      public void onShow(DialogInterface dialog)
+        {
+        Button btnPositive = ((AlertDialog)dialog).getButton(Dialog.BUTTON_POSITIVE);
+        btnPositive.setTextSize(TypedValue.COMPLEX_UNIT_PX, butSize);
+        }
+      });
+
+    return dialog;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  void fillUpNumberOfStars(View view)
+    {
+    int number = RubikScores.getInstance().getNumStars();
+    TextView v = view.findViewById(R.id.stars_string1);
+    v.setText(getString(R.string.buy_string1,number));
+    }
+  }
diff --git a/src/main/java/org/distorted/purchase/PurchaseScreenPane.java b/src/main/java/org/distorted/purchase/PurchaseScreenPane.java
index 46663692..ead51bcf 100644
--- a/src/main/java/org/distorted/purchase/PurchaseScreenPane.java
+++ b/src/main/java/org/distorted/purchase/PurchaseScreenPane.java
@@ -10,7 +10,6 @@
 package org.distorted.purchase;
 
 import android.graphics.drawable.Drawable;
-import android.os.Bundle;
 import android.util.TypedValue;
 import android.view.View;
 import android.widget.ImageButton;
@@ -20,7 +19,7 @@ import android.widget.TextView;
 
 import androidx.core.content.res.ResourcesCompat;
 
-import org.distorted.dialogs.RubikDialogStarsError;
+import org.distorted.dialogs.RubikDialogStarsStatus;
 import org.distorted.external.RubikScores;
 import org.distorted.library.main.DistortedScreen;
 import org.distorted.main.R;
@@ -75,12 +74,9 @@ public class PurchaseScreenPane implements ListenerOverlay
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private void showError(PurchaseActivity act, int price)
+  private void showError(PurchaseActivity act)
     {
-    Bundle bundle = new Bundle();
-    bundle.putInt("price", price );
-    RubikDialogStarsError d = new RubikDialogStarsError();
-    d.setArguments(bundle);
+    RubikDialogStarsStatus d = new RubikDialogStarsStatus();
     d.show(act.getSupportFragmentManager(), null);
     }
 
@@ -114,7 +110,7 @@ public class PurchaseScreenPane implements ListenerOverlay
         }
       else
         {
-        showError(act,price);
+        showError(act);
         }
       }
     }
@@ -123,16 +119,14 @@ public class PurchaseScreenPane implements ListenerOverlay
 
   private void allButtonClicked(PurchaseActivity act)
     {
-    int price = UNLOCK_ALL_PRICE;
-
-    if( chargeUser(price) )
+    if( chargeUser(UNLOCK_ALL_PRICE) )
       {
       RubikObjectList.buyAll();
       showSuccess(act,null);
       }
     else
       {
-      showError(act,price);
+      showError(act);
       }
     }
 
diff --git a/src/main/res/layout/dialog_stars_error.xml b/src/main/res/layout/dialog_stars_error.xml
deleted file mode 100644
index 3ff6ac3c..00000000
--- a/src/main/res/layout/dialog_stars_error.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:gravity="center|fill_horizontal"
-    android:padding="10dp"
-    android:background="@color/grey"
-    android:orientation="vertical">
-
-    <TextView
-        android:id="@+id/privacy_string"
-        android:background="@color/dark_grey"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:gravity="start"
-        android:textSize="21sp"
-        android:padding="10dp"
-        android:text="@string/explain_stars_text"
-        />
-</LinearLayout>
diff --git a/src/main/res/layout/dialog_stars_status.xml b/src/main/res/layout/dialog_stars_status.xml
new file mode 100644
index 00000000..7a87bb53
--- /dev/null
+++ b/src/main/res/layout/dialog_stars_status.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:gravity="center|fill_horizontal"
+    android:padding="10dp"
+    android:background="@color/grey"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/stars_string1"
+        android:background="@color/dark_grey"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="start"
+        android:textSize="21sp"
+        android:padding="10dp"
+        android:text="@string/buy_string1"
+        />
+    <TextView
+        android:id="@+id/stars_string2"
+        android:background="@color/dark_grey"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="start"
+        android:textSize="21sp"
+        android:padding="10dp"
+        android:text="@string/buy_string2"
+        />
+    <ImageButton
+        android:id="@+id/stars_buy_button"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center"
+        android:backgroundTint="@color/red"
+        android:scaleType="fitCenter"
+        android:src="@drawable/price_50"
+        />
+</LinearLayout>
diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml
index d8bf63ef..be9f1b4e 100755
--- a/src/main/res/values-de/strings.xml
+++ b/src/main/res/values-de/strings.xml
@@ -58,6 +58,9 @@
 
     <string name="buy_one">Diesen Cube freischalten</string>
     <string name="buy_all">Alles freischalten</string>
+    <string name="buy">Kauf</string>
+    <string name="buy_string1">Sie haben %1$d Sterne.</string>
+    <string name="buy_string2">Verdiene Sterne durch das Lösen von Rätseln. Sie können auch Sterne kaufen.</string>
 
     <string name="config_details">Einzelheiten</string>
     <string name="config_name">Name</string>
diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml
index ea88e045..5bf87e40 100755
--- a/src/main/res/values-es/strings.xml
+++ b/src/main/res/values-es/strings.xml
@@ -58,6 +58,9 @@
 
     <string name="buy_one">Desbloquea este cubo</string>
     <string name="buy_all">Desbloquear todo</string>
+    <string name="buy">Comprar</string>
+    <string name="buy_string1">Tienes %1$d estrellas.</string>
+    <string name="buy_string2">Gana estrellas resolviendo puzles. También puedes comprar estrellas.</string>
 
     <string name="config_details">Detalles</string>
     <string name="config_name">Nombre</string>
diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml
index 3cc1ec16..e4c98b22 100755
--- a/src/main/res/values-fr/strings.xml
+++ b/src/main/res/values-fr/strings.xml
@@ -58,6 +58,9 @@
 
     <string name="buy_one">Déverrouiller ce cube</string>
     <string name="buy_all">Tout débloquer</string>
+    <string name="buy">acheter</string>
+    <string name="buy_string1">Vous avez %1$d étoiles.</string>
+    <string name="buy_string2">Gagnez des étoiles en résolvant des puzzles. Vous pouvez également acheter des étoiles.</string>
 
     <string name="config_details">Détails</string>
     <string name="config_name">Nom</string>
diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml
index fbb4aa57..ca2a4df0 100755
--- a/src/main/res/values-ja/strings.xml
+++ b/src/main/res/values-ja/strings.xml
@@ -58,6 +58,9 @@
 
     <string name="buy_one">キューブをアンロックして</string>
     <string name="buy_all">全部のロックを解除して</string>
+    <string name="buy">買う</string>
+    <string name="buy_string1">星は%1$dつです。</string>
+    <string name="buy_string2">パズルを解くとスターがもらえます。また、スターを購入することもできます。</string>
 
     <string name="config_details">詳細</string>
     <string name="config_name">名前</string>
diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml
index 0c9875fd..688a527e 100755
--- a/src/main/res/values-ko/strings.xml
+++ b/src/main/res/values-ko/strings.xml
@@ -58,6 +58,9 @@
 
     <string name="buy_one">이 큐브의 잠금을 해제</string>
     <string name="buy_all">모든 것을 잠금 해제</string>
+    <string name="buy">구입</string>
+    <string name="buy_string1">별이 %1$d개입니다.</string>
+    <string name="buy_string2">퍼즐을 풀어 별을 획득하세요. 별을 살 수도 있습니다.</string>
 
     <string name="config_details">세부</string>
     <string name="config_name">이름</string>
diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml
index 40fac7ab..8186c9db 100644
--- a/src/main/res/values-pl/strings.xml
+++ b/src/main/res/values-pl/strings.xml
@@ -58,6 +58,9 @@
 
     <string name="buy_one">Odblokuj tą kostkę</string>
     <string name="buy_all">Odblokuj wszystko</string>
+    <string name="buy">Kup</string>
+    <string name="buy_string1">Masz %1$d gwiazdek.</string>
+    <string name="buy_string2">Zdobywaj nowe gwiazdki, rozwiązując kostki. Możesz także kupić gwiazdki.</string>
 
     <string name="config_details">O kostce</string>
     <string name="config_name">Nazwa</string>
@@ -71,7 +74,7 @@
     <string name="credits2">Piękne Wzory Waltera Randelshofera. Zobacz <a href="http://www.randelshofer.ch">http://www.randelshofer.ch</a></string>
     <string name="credits3">Rubik i RubikCube to zarejestrowane znaki towarowe. Nie jesteśmy z nimi powiązani.</string>
 
-    <string name="explain_stars_text">Ta wersja wprowadza koncepcję gwiazdek.\n\nZdobywaj gwiazdki, rozwiązując poziomy. Możesz także kupić gwiazdki.\n\nWydawaj gwiazdki, aby odblokować obiekty i inne funkcje w aplikacji.</string>
+    <string name="explain_stars_text">Ta wersja wprowadza koncepcję gwiazdek.\n\nZdobywaj gwiazdki, rozwiązując kostki. Możesz także kupić gwiazdki.\n\nWydawaj gwiazdki, aby odblokować obiekty i inne funkcje w aplikacji.</string>
     <string name="solver_generic_error1">Rozwiązywacz takiego obiektu jest jeszcze nie zaimplementowany!</string>
 
     <string name="solver_cube3_error1">Jest tylko %1$d %2$s ścian.</string>
diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml
index 53e055c1..e63fa3f2 100755
--- a/src/main/res/values-ru/strings.xml
+++ b/src/main/res/values-ru/strings.xml
@@ -58,6 +58,9 @@
 
     <string name="buy_one">Разблокируйте этот куб</string>
     <string name="buy_all">Разблокировать все</string>
+    <string name="buy">Купите</string>
+    <string name="buy_string1">У вас %1$d звезд.</string>
+    <string name="buy_string2">Зарабатывайте звезды, решая головоломки. Вы также можете покупать звезды.</string>
 
     <string name="config_details">Детали</string>
     <string name="config_name">Имя</string>
diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml
index df3e989d..47df0a70 100644
--- a/src/main/res/values-zh-rCN/strings.xml
+++ b/src/main/res/values-zh-rCN/strings.xml
@@ -58,6 +58,9 @@
 
     <string name="buy_one">解锁这个立方体</string>
     <string name="buy_all">解锁一切</string>
+    <string name="buy">购买</string>
+    <string name="buy_string1">你有 %1$d 颗星。</string>
+    <string name="buy_string2">通过解开谜题获得星星。你也可以购买星星。</string>
 
     <string name="config_details">细节</string>
     <string name="config_name">姓名</string>
diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml
index c619bdb8..e10a353e 100644
--- a/src/main/res/values-zh-rTW/strings.xml
+++ b/src/main/res/values-zh-rTW/strings.xml
@@ -58,6 +58,9 @@
 
     <string name="buy_one">解鎖這個立方體</string>
     <string name="buy_all">解鎖一切</string>
+    <string name="buy">買</string>
+    <string name="buy_string1">你有 %1$d 顆星。</string>
+    <string name="buy_string2">通過解開謎題贏得星星。你也可以購買星星。</string>
 
     <string name="config_details">細節</string>
     <string name="config_name">姓名</string>
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 7baaad46..d8a8efd5 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -59,6 +59,9 @@
 
     <string name="buy_one">Unlock this cube</string>
     <string name="buy_all">Unlock everything</string>
+    <string name="buy">Buy</string>
+    <string name="buy_string1">You have %1$d stars.</string>
+    <string name="buy_string2">Earn stars by solving puzzles. You can also buy stars.</string>
 
     <string name="level1" translatable="false">1</string>
     <string name="level2" translatable="false">2</string>
