commit 044529c1987145eef31d4b020cde6787f683f23f
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sat Mar 28 23:35:41 2020 +0000

    Remember state of the dialog.

diff --git a/src/main/java/org/distorted/dialog/RubikDialogPattern.java b/src/main/java/org/distorted/dialog/RubikDialogPattern.java
index 3ae7d4af..0237a386 100644
--- a/src/main/java/org/distorted/dialog/RubikDialogPattern.java
+++ b/src/main/java/org/distorted/dialog/RubikDialogPattern.java
@@ -129,6 +129,13 @@ public class RubikDialogPattern extends AppCompatDialogFragment
       }
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void rememberCategories()
+    {
+    mPagerAdapter.rememberCategories();
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public static String getDialogTag()
diff --git a/src/main/java/org/distorted/dialog/RubikDialogPatternPagerAdapter.java b/src/main/java/org/distorted/dialog/RubikDialogPatternPagerAdapter.java
index 364f4d22..2ff36574 100644
--- a/src/main/java/org/distorted/dialog/RubikDialogPatternPagerAdapter.java
+++ b/src/main/java/org/distorted/dialog/RubikDialogPatternPagerAdapter.java
@@ -50,6 +50,19 @@ class RubikDialogPatternPagerAdapter extends PagerAdapter
     viewPager.setOffscreenPageLimit(mNumTabs-1);
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  void rememberCategories()
+    {
+    RubikPattern pattern = RubikPattern.getInstance();
+
+    for(int i=0; i<mNumTabs; i++)
+      {
+      int cat = mViews[i].getCurrentCategory();
+      pattern.rememberCategory(i,cat);
+      }
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   @Override
diff --git a/src/main/java/org/distorted/dialog/RubikDialogPatternView.java b/src/main/java/org/distorted/dialog/RubikDialogPatternView.java
index b69f4628..79ea37bb 100644
--- a/src/main/java/org/distorted/dialog/RubikDialogPatternView.java
+++ b/src/main/java/org/distorted/dialog/RubikDialogPatternView.java
@@ -33,6 +33,7 @@ import android.widget.Spinner;
 
 import org.distorted.magic.R;
 import org.distorted.magic.RubikActivity;
+import org.distorted.object.RubikObjectList;
 import org.distorted.patterns.RubikPattern;
 import org.distorted.uistate.RubikState;
 import org.distorted.uistate.RubikStatePattern;
@@ -43,7 +44,7 @@ public class RubikDialogPatternView extends FrameLayout implements AdapterView.O
   {
   private LinearLayout mLayout;
   private RubikDialogPattern mDialog;
-  private int mPosition;
+  private int mTab, mPos;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -66,7 +67,7 @@ public class RubikDialogPatternView extends FrameLayout implements AdapterView.O
     super(act);
 
     mDialog = dialog;
-    mPosition = position;
+    mTab = position;
     View tab = inflate( act, R.layout.dialog_pattern_tab, null);
     mLayout = tab.findViewById(R.id.tabLayout);
 
@@ -79,7 +80,8 @@ public class RubikDialogPatternView extends FrameLayout implements AdapterView.O
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
     spinner.setAdapter(adapter);
 
-    spinner.setSelection(0);
+    RubikPattern pattern = RubikPattern.getInstance();
+    spinner.setSelection(pattern.recallCategory(mTab));
 
     addView(tab);
     }
@@ -89,13 +91,13 @@ public class RubikDialogPatternView extends FrameLayout implements AdapterView.O
   private String[] createCategories()
     {
     RubikPattern pattern = RubikPattern.getInstance();
-    int numCat = pattern.getNumCategories(mPosition);
+    int numCat = pattern.getNumCategories(mTab);
 
     String[] ret = new String[numCat];
 
     for(int i=0; i<numCat; i++)
       {
-      ret[i] = pattern.getCategoryName(mPosition,i);
+      ret[i] = pattern.getCategoryName(mTab,i);
       }
 
     return ret;
@@ -106,13 +108,13 @@ public class RubikDialogPatternView extends FrameLayout implements AdapterView.O
   private String[] createPatterns(int category)
     {
     RubikPattern pattern = RubikPattern.getInstance();
-    int numPat = pattern.getNumPatterns(mPosition, category);
+    int numPat = pattern.getNumPatterns(mTab, category);
 
     String[] ret = new String[numPat];
 
     for(int i=0; i<numPat; i++)
       {
-      ret[i] = pattern.getPatternName(mPosition, category, i);
+      ret[i] = pattern.getPatternName(mTab, category, i);
       }
 
     return ret;
@@ -148,7 +150,10 @@ public class RubikDialogPatternView extends FrameLayout implements AdapterView.O
         public void onClick(View view)
           {
           RubikStatePattern state = (RubikStatePattern) RubikState.PATT.getStateClass();
-          state.setPattern(mPosition, category, ii);
+          state.setPattern(mTab, category, ii);
+          int[] sizes = RubikObjectList.CUBE.getSizes();
+          act.changeObject(RubikObjectList.CUBE,sizes[mTab]);
+          mDialog.rememberCategories();
           mDialog.dismiss();
           }
         });
@@ -157,6 +162,13 @@ public class RubikDialogPatternView extends FrameLayout implements AdapterView.O
       }
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  int getCurrentCategory()
+    {
+    return mPos;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   @Override
@@ -164,6 +176,7 @@ public class RubikDialogPatternView extends FrameLayout implements AdapterView.O
     {
     if( parent.getId() == R.id.pattern_category_spinner )
       {
+      mPos = pos;
       fillPatterns(pos);
       }
     }
diff --git a/src/main/java/org/distorted/patterns/RubikPattern.java b/src/main/java/org/distorted/patterns/RubikPattern.java
index e73ec99a..dcfdf321 100644
--- a/src/main/java/org/distorted/patterns/RubikPattern.java
+++ b/src/main/java/org/distorted/patterns/RubikPattern.java
@@ -29,7 +29,8 @@ public class RubikPattern
   public static final int MAX_CUBE  = 5;
   public static final int NUM_CUBES = MAX_CUBE-MIN_CUBE+1;
 
-  private int[] numCategories = new int[NUM_CUBES];
+  private int[] numCategories   = new int[NUM_CUBES];
+  private int[] currentCategory = new int[NUM_CUBES];
   private Vector<Category>[] mCategories;
   private static RubikPattern mThis;
 
@@ -310,6 +311,23 @@ public class RubikPattern
     return null;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void rememberCategory(int size,int num)
+    {
+    if( size>=0 && size<NUM_CUBES )
+      {
+      currentCategory[size] = num;
+      }
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int recallCategory(int size)
+    {
+    return size>=0 && size<NUM_CUBES ? currentCategory[size] : 0;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public String getPatternName(int size, int cat, int pat)
diff --git a/src/main/java/org/distorted/uistate/RubikStatePattern.java b/src/main/java/org/distorted/uistate/RubikStatePattern.java
index a51241d5..9b987e0e 100644
--- a/src/main/java/org/distorted/uistate/RubikStatePattern.java
+++ b/src/main/java/org/distorted/uistate/RubikStatePattern.java
@@ -153,6 +153,7 @@ public class RubikStatePattern extends RubikStateAbstract
           }
         else
           {
+          diag.rememberCategories();
           diag.dismiss();
           RubikState.goBack(act);
           }
@@ -164,6 +165,8 @@ public class RubikStatePattern extends RubikStateAbstract
 
   public void setPattern(int sizeIndex, int category, int pattern)
     {
+    mSize = RubikObjectList.CUBE.getSizes()[sizeIndex];
+
     RubikPattern patt = RubikPattern.getInstance();
     String patternName = patt.getPatternName(sizeIndex,category,pattern);
     mText.setText(patternName);
