commit 7c9910e52949b891f43a0413ca5b46f328f472fc
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Aug 15 14:34:40 2022 +0200

    IAP part 5: new 'Purchase' activity (cont'd)

diff --git a/src/main/java/org/distorted/purchase/PurchaseScreen.java b/src/main/java/org/distorted/purchase/PurchaseScreen.java
index b160d102..fd0455c2 100644
--- a/src/main/java/org/distorted/purchase/PurchaseScreen.java
+++ b/src/main/java/org/distorted/purchase/PurchaseScreen.java
@@ -9,92 +9,19 @@
 
 package org.distorted.purchase;
 
-import android.os.Build;
-import android.util.TypedValue;
-import android.view.Gravity;
 import android.view.View;
-import android.widget.GridLayout;
-import android.widget.ImageButton;
 import android.widget.LinearLayout;
-import android.widget.PopupWindow;
-import android.widget.ScrollView;
-import android.widget.TextView;
 
-import org.distorted.helpers.PopupCreator;
 import org.distorted.helpers.TransparentImageButton;
 import org.distorted.main.R;
 import org.distorted.main.RubikActivity;
 import org.distorted.objectlib.main.ObjectControl;
-import org.distorted.objects.RubikObject;
-import org.distorted.objects.RubikObjectList;
-
-import static android.view.View.inflate;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public class PurchaseScreen
 {
-  private static final int NUM_COLUMNS = 5;
-  private static final int[] mLocation = new int[2];
-
-  private TransparentImageButton mBackButton, mObjectButton, mPrevButton, mNextButton;
-  private TextView mMovesText;
-  private PopupWindow mObjectPopup;
-  private PurchaseScreenPane mPane;
-  private int mObjectOrdinal;
-  private int mColCount, mRowCount, mMaxRowCount;
-  private int mObjectSize;
-  private int mBarHeight;
-  private float mButtonSize;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private void setupObjectWindow(final PurchaseActivity act, final float width, final float height)
-    {
-    int numObjects= RubikObjectList.getNumObjects();
-    mRowCount = (numObjects + NUM_COLUMNS-1) / NUM_COLUMNS;
-    mColCount = NUM_COLUMNS;
-
-    int cubeSize  = (int)(width/9);
-    int margin    = (int)(width*RubikActivity.LARGE_MARGIN);
-    int padding   = (int)(width*RubikActivity.POPUP_PADDING);
-    mObjectSize   = (int)(cubeSize + 2*margin + 0.5f);
-    mMaxRowCount  = (int)((height-mBarHeight)/mObjectSize);
-
-    ScrollView view = (ScrollView)inflate( act, R.layout.popup_object_simple, null);
-    GridLayout objectGrid = view.findViewById(R.id.objectGrid);
-
-    PopupCreator.createObjectGrid(objectGrid,act,mRowCount,mColCount,numObjects,margin,cubeSize,padding);
-
-    for(int child=0; child<numObjects; child++)
-      {
-      final RubikObject obj = RubikObjectList.getObject(child);
-      View v = objectGrid.getChildAt(child);
-      ImageButton button = PopupCreator.getButton(obj,v);
-      final int ordinal = child;
-
-      button.setOnClickListener( new View.OnClickListener()
-        {
-        @Override
-        public void onClick(View v)
-          {
-          if( act.getControl().isUINotBlocked() && mObjectOrdinal!=ordinal )
-            {
-            mObjectOrdinal = ordinal;
-            act.changeObject(mObjectOrdinal);
-            mMovesText.setText(act.getString(R.string.mo_placeholder,mObjectOrdinal+1,numObjects));
-            mPane.updatePane(act,mObjectOrdinal);
-            }
-
-          mObjectPopup.dismiss();
-          }
-        });
-      }
-
-    mObjectPopup = new PopupWindow(act);
-    mObjectPopup.setFocusable(true);
-    mObjectPopup.setContentView(view);
-    }
+  private TransparentImageButton mBackButton;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -118,172 +45,9 @@ public class PurchaseScreen
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private void setupObjectButton(final PurchaseActivity act, final int width)
-    {
-    final int margin= (int)(width*RubikActivity.SMALL_MARGIN);
-    final int icon = RubikActivity.getDrawable(R.drawable.ui_small_cube_menu,R.drawable.ui_medium_cube_menu, R.drawable.ui_big_cube_menu, R.drawable.ui_huge_cube_menu);
-    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
-    mObjectButton = new TransparentImageButton(act, icon, TransparentImageButton.GRAVITY_MIDDLE, params);
-
-    mObjectButton.setOnClickListener( new View.OnClickListener()
-      {
-      @Override
-      public void onClick(View view)
-        {
-        if( mObjectPopup==null )
-          {
-          float height= act.getScreenHeightInPixels();
-          setupObjectWindow(act,width,height);
-          }
-
-        if( act.getControl().isUINotBlocked())
-          {
-          int rowCount = Math.min(mMaxRowCount,mRowCount);
-          View popupView = mObjectPopup.getContentView();
-          popupView.setSystemUiVisibility(RubikActivity.FLAGS);
-          displayPopup(act,view,mObjectPopup,mObjectSize*mColCount,mObjectSize*rowCount+5*margin,margin,margin);
-          }
-        }
-      });
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// work around lame bugs in Android's version <= 10 pop-up and split-screen modes
-
-  private void displayPopup(PurchaseActivity act, View view, PopupWindow window, int w, int h, int xoff, int yoff)
-    {
-    View topLayout = act.findViewById(R.id.mainLayout);
-    boolean isFullScreen;
-
-    if( topLayout!=null )
-      {
-      topLayout.getLocationOnScreen(mLocation);
-      isFullScreen = (mLocation[1]==0);
-      }
-    else
-      {
-      isFullScreen = true;
-      }
-
-    try
-      {
-      // if on Android 11 or we are fullscreen
-      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R || isFullScreen )
-        {
-        window.showAsDropDown(view, xoff, yoff, Gravity.CENTER);
-        window.update(view, w, h);
-        }
-      else  // Android 10 or below in pop-up mode or split-screen mode
-        {
-        view.getLocationOnScreen(mLocation);
-        int width  = view.getWidth();
-        int height = view.getHeight();
-        int x = mLocation[0]+(width-w)/2;
-        int y = mLocation[1]+height+yoff;
-
-        window.showAsDropDown(view);
-        window.update(x,y,w,h);
-        }
-      }
-    catch( IllegalArgumentException iae )
-      {
-      // ignore, this means window is 'not attached to window manager' -
-      // which most probably is because we are already exiting the app.
-      }
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private void prevObject(PurchaseActivity act, int numObjects)
-    {
-    mObjectOrdinal--;
-    if( mObjectOrdinal<0 ) mObjectOrdinal=numObjects-1;
-
-    act.changeObject(mObjectOrdinal);
-    mPane.updatePane(act,mObjectOrdinal);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private void nextObject(PurchaseActivity act, int numObjects)
-    {
-    mObjectOrdinal++;
-    if( mObjectOrdinal>=numObjects ) mObjectOrdinal=0;
-
-    act.changeObject(mObjectOrdinal);
-    mPane.updatePane(act,mObjectOrdinal);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private void setupPrevButton(final PurchaseActivity act)
-    {
-    int icon = RubikActivity.getDrawable(R.drawable.ui_small_left,R.drawable.ui_medium_left, R.drawable.ui_big_left, R.drawable.ui_huge_left);
-    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
-    mPrevButton = new TransparentImageButton(act,icon,TransparentImageButton.GRAVITY_MIDDLE,params);
-
-    mPrevButton.setOnClickListener( new View.OnClickListener()
-      {
-      @Override
-      public void onClick(View v)
-        {
-        int numObjects = RubikObjectList.getNumObjects();
-        prevObject(act,numObjects);
-        mMovesText.setText(act.getString(R.string.mo_placeholder,mObjectOrdinal+1,numObjects));
-        }
-      });
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private void setupNextButton(final PurchaseActivity act)
-    {
-    int icon = RubikActivity.getDrawable(R.drawable.ui_small_right,R.drawable.ui_medium_right, R.drawable.ui_big_right, R.drawable.ui_huge_right);
-    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1.0f);
-    mNextButton = new TransparentImageButton(act,icon,TransparentImageButton.GRAVITY_MIDDLE,params);
-
-    mNextButton.setOnClickListener( new View.OnClickListener()
-      {
-      @Override
-      public void onClick(View v)
-        {
-        int numObjects = RubikObjectList.getNumObjects();
-        nextObject(act,numObjects);
-        mMovesText.setText(act.getString(R.string.mo_placeholder,mObjectOrdinal+1,numObjects));
-        }
-      });
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private void setupTextView(final PurchaseActivity act, final float width, int numObjects)
-    {
-    int padding = (int)(width*RubikActivity.PADDING);
-    int margin  = (int)(width*RubikActivity.SMALL_MARGIN);
-    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,2.0f);
-    params.topMargin    = margin;
-    params.bottomMargin = margin;
-    params.leftMargin   = margin;
-    params.rightMargin  = margin;
-
-    mMovesText = new TextView(act);
-    mMovesText.setTextSize(20);
-    mMovesText.setLayoutParams(params);
-    mMovesText.setPadding(padding,0,padding,0);
-    mMovesText.setGravity(Gravity.CENTER);
-    mMovesText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mButtonSize);
-    mMovesText.setText(act.getString(R.string.mo_placeholder,mObjectOrdinal+1,numObjects));
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  void onAttachedToWindow(final PurchaseActivity act, final int objectOrdinal)
+  void onAttachedToWindow(final PurchaseActivity act, final int ordinal)
     {
-    int numObjects = RubikObjectList.getNumObjects();
     int width = act.getScreenWidthInPixels();
-    mBarHeight = act.getHeightBar();
-    mButtonSize = width*RubikActivity.BUTTON_TEXT_SIZE;
-    mObjectOrdinal = objectOrdinal;
 
     LinearLayout.LayoutParams paramsL = new LinearLayout.LayoutParams(width/4, LinearLayout.LayoutParams.MATCH_PARENT);
     LinearLayout.LayoutParams paramsM = new LinearLayout.LayoutParams(width/2, LinearLayout.LayoutParams.MATCH_PARENT);
@@ -296,16 +60,8 @@ public class PurchaseScreen
     LinearLayout layoutRight= new LinearLayout(act);
     layoutRight.setLayoutParams(paramsR);
 
-    setupObjectButton(act,width);
-    setupPrevButton(act);
-    setupNextButton(act);
-    setupTextView(act,width,numObjects);
     setupBackButton(act);
 
-    layoutLeft.addView(mObjectButton);
-    layoutMid.addView(mPrevButton);
-    layoutMid.addView(mMovesText);
-    layoutMid.addView(mNextButton);
     layoutRight.addView(mBackButton);
 
     LinearLayout layout = act.findViewById(R.id.lowerBar);
@@ -314,6 +70,7 @@ public class PurchaseScreen
     layout.addView(layoutMid);
     layout.addView(layoutRight);
 
-    mPane = new PurchaseScreenPane(act,mObjectOrdinal);
+    PurchaseScreenPane pane = new PurchaseScreenPane(act,ordinal);
+    pane.updatePane(act,ordinal);
     }
 }
