commit f8e8a08eda758411440b1b53e44aa4ec01cea1a4
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Jan 2 21:04:27 2023 +0100

    Purchase Pane: post-purchase dialogs.

diff --git a/src/main/java/org/distorted/dialogs/RubikDialogStarsError.java b/src/main/java/org/distorted/dialogs/RubikDialogStarsError.java
index 76e8d074..77ef8aa1 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogStarsError.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogStarsError.java
@@ -42,7 +42,7 @@ public class RubikDialogStarsError extends AppCompatDialogFragment
     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_explain_stars, null);
+    final View view = inflater.inflate(R.layout.dialog_stars_error, null);
 
     Bundle args = getArguments();
     long price;
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogStarsExplain.java b/src/main/java/org/distorted/dialogs/RubikDialogStarsExplain.java
index 48231c23..e67e6ff2 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogStarsExplain.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogStarsExplain.java
@@ -41,7 +41,7 @@ public class RubikDialogStarsExplain extends AppCompatDialogFragment
     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_explain_stars, null);
+    final View view = inflater.inflate(R.layout.dialog_stars_explain, null);
 
     builder.setCancelable(true);
 
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogStarsSuccess.java b/src/main/java/org/distorted/dialogs/RubikDialogStarsSuccess.java
deleted file mode 100644
index d41329d2..00000000
--- a/src/main/java/org/distorted/dialogs/RubikDialogStarsSuccess.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 RubikDialogStarsSuccess 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_explain_stars, null);
-
-    Bundle args = getArguments();
-    String objectName;
-
-    try
-      {
-      objectName = args.getString("object");
-      }
-    catch(Exception e)
-      {
-      objectName = null;
-      }
-
-    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/overlays/OverlayStars.java b/src/main/java/org/distorted/overlays/OverlayStars.java
index 389fe96a..486c2e45 100644
--- a/src/main/java/org/distorted/overlays/OverlayStars.java
+++ b/src/main/java/org/distorted/overlays/OverlayStars.java
@@ -51,6 +51,8 @@ public class OverlayStars extends OverlayGeneric implements EffectListener
    private static final int DUR_MOV =  3000;
    private static final int DUR_GLO =   600;
 
+   private static final int MAX_FALLING = 50;
+
    private ListenerOverlay mListener;
    private DistortedNode mNodeFalling, mNodeCentral;
    private DistortedScreen mScreen;
@@ -203,10 +205,11 @@ public class OverlayStars extends OverlayGeneric implements EffectListener
       {
       DistortedTexture texture = new DistortedTexture();
       texture.setTexture(mStarBitmap);
+      int numFalling = Math.min(mNewStars,MAX_FALLING);
 
-      MeshQuad[] mesh = new MeshQuad[mNewStars];
+      MeshQuad[] mesh = new MeshQuad[numFalling];
 
-      for(int i=0; i<mNewStars; i++)
+      for(int i=0; i<numFalling; i++)
          {
          mesh[i] = new MeshQuad();
          mesh[i].setEffectAssociation(0,1,i+1);
@@ -219,7 +222,7 @@ public class OverlayStars extends OverlayGeneric implements EffectListener
       scaleE.setMeshAssociation(1,-1);
       effects.apply(scaleE);
 
-      for(int i=0; i<mNewStars; i++)
+      for(int i=0; i<numFalling; i++)
         {
         Dynamic3D moveP = createRandomMove(increase);
         VertexEffectMove moveE= new VertexEffectMove(moveP);
diff --git a/src/main/java/org/distorted/purchase/PurchaseActivity.java b/src/main/java/org/distorted/purchase/PurchaseActivity.java
index 9b3ecefc..bf37df60 100644
--- a/src/main/java/org/distorted/purchase/PurchaseActivity.java
+++ b/src/main/java/org/distorted/purchase/PurchaseActivity.java
@@ -244,6 +244,14 @@ public class PurchaseActivity extends AppCompatActivity
       return view.getObjectControl();
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    PurchaseRenderer getRenderer()
+      {
+      PurchaseSurfaceView view = findViewById(R.id.purchaseSurfaceView);
+      return view.getRenderer();
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public static int getDrawableSize()
@@ -291,12 +299,4 @@ public class PurchaseActivity extends AppCompatActivity
 
       return 0;
       }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-    boolean isVertical()
-      {
-      PurchaseSurfaceView view = findViewById(R.id.purchaseSurfaceView);
-      return view.isVertical();
-      }
 }
diff --git a/src/main/java/org/distorted/purchase/PurchaseScreenPane.java b/src/main/java/org/distorted/purchase/PurchaseScreenPane.java
index de4f659a..181d19dc 100644
--- a/src/main/java/org/distorted/purchase/PurchaseScreenPane.java
+++ b/src/main/java/org/distorted/purchase/PurchaseScreenPane.java
@@ -22,10 +22,13 @@ import androidx.core.content.res.ResourcesCompat;
 
 import org.distorted.dialogs.RubikDialogStarsError;
 import org.distorted.external.RubikScores;
+import org.distorted.library.main.DistortedScreen;
 import org.distorted.main.R;
 import org.distorted.objectlib.json.JsonReader;
 import org.distorted.objects.RubikObject;
 import org.distorted.objects.RubikObjectList;
+import org.distorted.overlays.DataStars;
+import org.distorted.overlays.OverlayStars;
 
 import java.io.InputStream;
 
@@ -81,11 +84,14 @@ public class PurchaseScreenPane
 
   private void showSuccess(PurchaseActivity act, RubikObject object)
     {
-    Bundle bundle = new Bundle();
-    bundle.putString("object", object.getUpperName() );
-    RubikDialogStarsError d = new RubikDialogStarsError();
-    d.setArguments(bundle);
-    d.show(act.getSupportFragmentManager(), null);
+    RubikScores scores = RubikScores.getInstance();
+    int totStars = scores.getNumStars();
+    int price = object==null ? UNLOCK_ALL_PRICE:object.getPrice();
+    PurchaseRenderer renderer = act.getRenderer();
+    DistortedScreen screen = renderer.getScreen();
+    OverlayStars stars = new OverlayStars();
+    DataStars data = new DataStars(totStars,-price,act.getResources());
+    stars.startOverlay(screen,null,data);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/purchase/PurchaseSurfaceView.java b/src/main/java/org/distorted/purchase/PurchaseSurfaceView.java
index 3ac14437..ca1848bd 100644
--- a/src/main/java/org/distorted/purchase/PurchaseSurfaceView.java
+++ b/src/main/java/org/distorted/purchase/PurchaseSurfaceView.java
@@ -50,16 +50,16 @@ public class PurchaseSurfaceView extends GLSurfaceView
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    boolean isVertical()
+    ObjectControl getObjectControl()
       {
-      return mScreenHeight>mScreenWidth;
+      return mObjectController;
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    ObjectControl getObjectControl()
+    PurchaseRenderer getRenderer()
       {
-      return mObjectController;
+      return mRenderer;
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/res/layout/dialog_explain_stars.xml b/src/main/res/layout/dialog_explain_stars.xml
deleted file mode 100644
index 3ff6ac3c..00000000
--- a/src/main/res/layout/dialog_explain_stars.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_error.xml b/src/main/res/layout/dialog_stars_error.xml
new file mode 100644
index 00000000..3ff6ac3c
--- /dev/null
+++ b/src/main/res/layout/dialog_stars_error.xml
@@ -0,0 +1,20 @@
+<?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_explain.xml b/src/main/res/layout/dialog_stars_explain.xml
new file mode 100644
index 00000000..3ff6ac3c
--- /dev/null
+++ b/src/main/res/layout/dialog_stars_explain.xml
@@ -0,0 +1,20 @@
+<?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>
