commit 85248b048177c452dfb47d7bd6b2f7bf39590ba3
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Apr 14 22:16:05 2020 +0100

    Finally solve the bug on Samsung Android 9 and 10 phones that the Dialogs Main & patterns wouldn't be modeless: move the setting of this flag earlier, to the 'onCreateDialog()' function.

diff --git a/src/main/java/org/distorted/dialogs/RubikDialogAbout.java b/src/main/java/org/distorted/dialogs/RubikDialogAbout.java
index 5f36bfa9..3ae7cd0d 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogAbout.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogAbout.java
@@ -38,28 +38,6 @@ import org.distorted.main.R;
 
 public class RubikDialogAbout extends AppCompatDialogFragment
   {
-  @Override
-  public void onStart()
-    {
-    super.onStart();
-
-    Dialog dialog = getDialog();
-
-    if( dialog!=null )
-      {
-      dialog.setCanceledOnTouchOutside(false);
-
-      Window window = dialog.getWindow();
-
-      if( window!=null )
-        {
-        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
-        }
-      }
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
   @NonNull
   @Override
   public Dialog onCreateDialog(Bundle savedInstanceState)
@@ -89,6 +67,17 @@ public class RubikDialogAbout extends AppCompatDialogFragment
     text.setText(getString(R.string.ap_placeholder,appName, appVers));
     builder.setView(view);
 
-    return builder.create();
+    Dialog dialog = builder.create();
+
+    dialog.setCanceledOnTouchOutside(false);
+
+    Window window = dialog.getWindow();
+
+    if( window!=null )
+      {
+      window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+      }
+
+    return dialog;
     }
   }
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogEffects.java b/src/main/java/org/distorted/dialogs/RubikDialogEffects.java
index e762908b..a87867da 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogEffects.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogEffects.java
@@ -49,28 +49,6 @@ public class RubikDialogEffects extends AppCompatDialogFragment implements SeekB
   {
   private TextView[] mDurationText;
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  @Override
-  public void onStart()
-    {
-    super.onStart();
-
-    Dialog dialog = getDialog();
-
-    if( dialog!=null )
-      {
-      dialog.setCanceledOnTouchOutside(false);
-
-      Window window = dialog.getWindow();
-
-      if( window!=null )
-        {
-        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
-        }
-      }
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   private void addSettingsSection(FragmentActivity act, LinearLayout layout, int index)
@@ -259,7 +237,18 @@ public class RubikDialogEffects extends AppCompatDialogFragment implements SeekB
       android.util.Log.e("dialog_settings", "linearLayout NULL!");
       }
 
-    return builder.create();
+    Dialog dialog = builder.create();
+
+    dialog.setCanceledOnTouchOutside(false);
+
+    Window window = dialog.getWindow();
+
+    if( window!=null )
+      {
+      window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+      }
+
+    return dialog;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogMain.java b/src/main/java/org/distorted/dialogs/RubikDialogMain.java
index d33176f3..bfd89612 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogMain.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogMain.java
@@ -36,30 +36,6 @@ import org.distorted.main.R;
 
 public class RubikDialogMain extends AppCompatDialogFragment
   {
-  @Override
-  public void onStart()
-    {
-    super.onStart();
-
-    Dialog dialog = getDialog();
-
-    if( dialog!=null )
-      {
-      dialog.setCanceledOnTouchOutside(false);
-
-      Window window = dialog.getWindow();
-
-      if( window!=null )
-        {
-        window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
-                        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
-        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
-        }
-      }
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
   @NonNull
   @Override
   public Dialog onCreateDialog(Bundle savedInstanceState)
@@ -70,7 +46,20 @@ public class RubikDialogMain extends AppCompatDialogFragment
     final View view = inflater.inflate(R.layout.dialog_main, null);
     builder.setView(view);
 
-    return builder.create();
+    Dialog dialog = builder.create();
+
+    dialog.setCanceledOnTouchOutside(false);
+
+    Window window = dialog.getWindow();
+
+    if( window!=null )
+      {
+      window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
+                      WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
+      window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+      }
+
+    return dialog;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java b/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java
index 443bfb6a..74b5fc1f 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java
@@ -141,6 +141,17 @@ public class RubikDialogNewRecord extends AppCompatDialogFragment
     text.setText(getString(R.string.ti_placeholder, (time/100)/10.0f));
     builder.setView(view);
 
-    return builder.create();
+    Dialog dialog = builder.create();
+
+    dialog.setCanceledOnTouchOutside(false);
+
+    Window window = dialog.getWindow();
+
+    if( window!=null )
+      {
+      window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+      }
+
+    return dialog;
     }
   }
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogPattern.java b/src/main/java/org/distorted/dialogs/RubikDialogPattern.java
index c8a5dace..87a0f872 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogPattern.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogPattern.java
@@ -46,30 +46,6 @@ public class RubikDialogPattern extends AppCompatDialogFragment
   {
   private RubikDialogPatternPagerAdapter mPagerAdapter;
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  @Override
-  public void onStart()
-    {
-    super.onStart();
-
-    Dialog dialog = getDialog();
-
-    if( dialog!=null )
-      {
-      dialog.setCanceledOnTouchOutside(false);
-
-      Window window = dialog.getWindow();
-
-      if( window!=null )
-        {
-        window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
-                        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
-        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
-        }
-      }
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   @NonNull
@@ -119,7 +95,20 @@ public class RubikDialogPattern extends AppCompatDialogFragment
       if(tab!=null) tab.setCustomView(imageView);
       }
 
-    return builder.create();
+    Dialog dialog = builder.create();
+
+    dialog.setCanceledOnTouchOutside(false);
+
+    Window window = dialog.getWindow();
+
+    if( window!=null )
+      {
+      window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
+                      WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
+      window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+      }
+
+    return dialog;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogScores.java b/src/main/java/org/distorted/dialogs/RubikDialogScores.java
index fedb4a9d..d9dfaa67 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogScores.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogScores.java
@@ -42,29 +42,7 @@ import org.distorted.objects.RubikObjectList;
 
 public class RubikDialogScores extends AppCompatDialogFragment
   {
-  RubikDialogScoresPagerAdapter mPagerAdapter;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  @Override
-  public void onStart()
-    {
-    super.onStart();
-
-    Dialog dialog = getDialog();
-
-    if( dialog!=null )
-      {
-      dialog.setCanceledOnTouchOutside(false);
-
-      Window window = dialog.getWindow();
-
-      if( window!=null )
-        {
-        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
-        }
-      }
-    }
+  private RubikDialogScoresPagerAdapter mPagerAdapter;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -133,6 +111,17 @@ public class RubikDialogScores extends AppCompatDialogFragment
         }
       }
 
-    return builder.create();
+    Dialog dialog = builder.create();
+
+    dialog.setCanceledOnTouchOutside(false);
+
+    Window window = dialog.getWindow();
+
+    if( window!=null )
+      {
+      window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+      }
+
+    return dialog;
     }
   }
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogSetName.java b/src/main/java/org/distorted/dialogs/RubikDialogSetName.java
index 35638456..5bd5c3ce 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogSetName.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogSetName.java
@@ -49,36 +49,6 @@ public class RubikDialogSetName extends AppCompatDialogFragment
   {
   private EditText mEdit;
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  @Override
-  public void onStart()
-    {
-    super.onStart();
-
-    AlertDialog dialog = (AlertDialog) getDialog();
-
-    if (dialog != null)
-      {
-      dialog.setCanceledOnTouchOutside(false);
-
-      Window window = dialog.getWindow();
-
-      if( window!=null )
-        {
-        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
-        }
-
-      Button positiveButton = dialog.getButton(Dialog.BUTTON_POSITIVE);
-
-      if( positiveButton!=null )
-        {
-        String editName = mEdit.getText().toString();
-        positiveButton.setEnabled(editName.length()>0);
-        }
-      }
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   @NonNull
@@ -172,6 +142,23 @@ public class RubikDialogSetName extends AppCompatDialogFragment
         }
       });
 
+    dialog.setCanceledOnTouchOutside(false);
+
+    Window window = dialog.getWindow();
+
+    if( window!=null )
+      {
+      window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+      }
+
+    Button positiveButton = ((AlertDialog)dialog).getButton(Dialog.BUTTON_POSITIVE);
+
+    if( positiveButton!=null )
+      {
+      String editName = mEdit.getText().toString();
+      positiveButton.setEnabled(editName.length()>0);
+      }
+
     return dialog;
     }
   }
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogSolved.java b/src/main/java/org/distorted/dialogs/RubikDialogSolved.java
index 3f90fecb..26b901e9 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogSolved.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogSolved.java
@@ -40,28 +40,6 @@ import org.distorted.states.RubikState;
 
 public class RubikDialogSolved extends AppCompatDialogFragment
   {
-  @Override
-  public void onStart()
-    {
-    super.onStart();
-
-    Dialog dialog = getDialog();
-
-    if( dialog!=null )
-      {
-      dialog.setCanceledOnTouchOutside(false);
-
-      Window window = dialog.getWindow();
-
-      if( window!=null )
-        {
-        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
-        }
-      }
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
   @NonNull
   @Override
   public Dialog onCreateDialog(Bundle savedInstanceState)
@@ -102,6 +80,17 @@ public class RubikDialogSolved extends AppCompatDialogFragment
     text.setText(getString(R.string.ti_placeholder, (time/100)/10.0f));
     builder.setView(view);
 
-    return builder.create();
+    Dialog dialog = builder.create();
+
+    dialog.setCanceledOnTouchOutside(false);
+
+    Window window = dialog.getWindow();
+
+    if( window!=null )
+      {
+      window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+      }
+
+    return dialog;
     }
   }
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogSolverError.java b/src/main/java/org/distorted/dialogs/RubikDialogSolverError.java
index d0a3d21b..f7cc3368 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogSolverError.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogSolverError.java
@@ -38,28 +38,6 @@ import org.distorted.main.R;
 
 public class RubikDialogSolverError extends AppCompatDialogFragment
   {
-  @Override
-  public void onStart()
-    {
-    super.onStart();
-
-    Dialog dialog = getDialog();
-
-    if( dialog!=null )
-      {
-      dialog.setCanceledOnTouchOutside(false);
-
-      Window window = dialog.getWindow();
-
-      if( window!=null )
-        {
-        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
-        }
-      }
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
   @NonNull
   @Override
   public Dialog onCreateDialog(Bundle savedInstanceState)
@@ -99,6 +77,17 @@ public class RubikDialogSolverError extends AppCompatDialogFragment
     text.setText(errorStr);
     builder.setView(view);
 
-    return builder.create();
+    Dialog dialog = builder.create();
+
+    dialog.setCanceledOnTouchOutside(false);
+
+    Window window = dialog.getWindow();
+
+    if( window!=null )
+      {
+      window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+      }
+
+    return dialog;
     }
   }
