commit 584585d06e6e99ebe35ad5a5b55f9ba3c103e853
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sun Apr 12 19:13:25 2020 +0100

    (Hopefully) make the Dialogs NOT disappear on clicks outside (previously this wasn't working on Android 9).
    Lower API requirements to 21.

diff --git a/src/main/java/org/distorted/dialogs/RubikDialogAbout.java b/src/main/java/org/distorted/dialogs/RubikDialogAbout.java
index 18c1a968..a0775a9b 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogAbout.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogAbout.java
@@ -43,10 +43,17 @@ public class RubikDialogAbout extends AppCompatDialogFragment
     {
     super.onStart();
 
-    Window window = getDialog().getWindow();
-    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
-                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
-    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+    Dialog dialog = getDialog();
+    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);
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogEffects.java b/src/main/java/org/distorted/dialogs/RubikDialogEffects.java
index b5b229d6..361d28e7 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogEffects.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogEffects.java
@@ -90,7 +90,7 @@ public class RubikDialogEffects extends AppCompatDialogFragment implements SeekB
     textView.setLayoutParams(textParams);
     textView.setGravity(Gravity.CENTER);
     textView.setPadding(padding,0,padding,0);
-    textView.setTextAppearance(android.R.style.TextAppearance_Small);
+    textView.setTextAppearance(act,android.R.style.TextAppearance_Small);
     outerLayout.addView(textView);
 
     ///// INNER LAYOUT1 //////////////////////////////////////////////////////////////////
@@ -114,7 +114,7 @@ public class RubikDialogEffects extends AppCompatDialogFragment implements SeekB
     text1View.setLayoutParams(text1LayoutParams);
     text1View.setGravity(Gravity.START|Gravity.CENTER);
     text1View.setPadding(text1Padding,0,text1Padding,0);
-    text1View.setTextAppearance(android.R.style.TextAppearance_Small);
+    text1View.setTextAppearance(act,android.R.style.TextAppearance_Small);
     innerLayout1.addView(text1View);
     //////////////////////////////////////////////////////////////////
     int text2Padding = (int)(scale*5 + 0.5f);
@@ -124,7 +124,7 @@ public class RubikDialogEffects extends AppCompatDialogFragment implements SeekB
     mDurationText[index].setLayoutParams(text2LayoutParams);
     mDurationText[index].setGravity(Gravity.END|Gravity.CENTER);
     mDurationText[index].setPadding(text2Padding,0,text2Padding,0);
-    mDurationText[index].setTextAppearance(android.R.style.TextAppearance_Small);
+    mDurationText[index].setTextAppearance(act,android.R.style.TextAppearance_Small);
     innerLayout1.addView(mDurationText[index]);
     //////////////////////////////////////////////////////////////////
     int seekPadding = (int)(scale*10 + 0.5f);
@@ -160,7 +160,7 @@ public class RubikDialogEffects extends AppCompatDialogFragment implements SeekB
     text3View.setLayoutParams(text3LayoutParams);
     text3View.setGravity(Gravity.START|Gravity.CENTER);
     text3View.setPadding(text3Padding,0,text3Padding,0);
-    text3View.setTextAppearance(android.R.style.TextAppearance_Small);
+    text3View.setTextAppearance(act,android.R.style.TextAppearance_Small);
     innerLayout2.addView(text3View);
     //////////////////////////////////////////////////////////////////
     int spinnerPadding = (int)(scale*10 + 0.5f);
@@ -204,10 +204,17 @@ public class RubikDialogEffects extends AppCompatDialogFragment implements SeekB
     {
     super.onStart();
 
-    Window window = getDialog().getWindow();
-    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
-                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
-    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+    Dialog dialog = getDialog();
+    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);
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogMain.java b/src/main/java/org/distorted/dialogs/RubikDialogMain.java
index 8387a91a..db5d757a 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogMain.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogMain.java
@@ -41,10 +41,17 @@ public class RubikDialogMain extends AppCompatDialogFragment
     {
     super.onStart();
 
-    Window window = getDialog().getWindow();
-    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
-                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
-    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+    Dialog dialog = getDialog();
+    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);
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java b/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java
index 4b3a79a3..020dc8cb 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java
@@ -48,10 +48,17 @@ public class RubikDialogNewRecord extends AppCompatDialogFragment
     {
     super.onStart();
 
-    Window window = getDialog().getWindow();
-    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
-                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
-    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+    Dialog dialog = getDialog();
+    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);
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogPattern.java b/src/main/java/org/distorted/dialogs/RubikDialogPattern.java
index 14233c41..05e45261 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogPattern.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogPattern.java
@@ -53,10 +53,17 @@ public class RubikDialogPattern extends AppCompatDialogFragment
     {
     super.onStart();
 
-    Window window = getDialog().getWindow();
-    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
-                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
-    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+    Dialog dialog = getDialog();
+    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);
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogScores.java b/src/main/java/org/distorted/dialogs/RubikDialogScores.java
index 57d44224..18fd4dc4 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogScores.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogScores.java
@@ -51,10 +51,17 @@ public class RubikDialogScores extends AppCompatDialogFragment
     {
     super.onStart();
 
-    Window window = getDialog().getWindow();
-    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
-                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
-    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+    Dialog dialog = getDialog();
+    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);
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogSetName.java b/src/main/java/org/distorted/dialogs/RubikDialogSetName.java
index b9f68ddc..3c9c23fa 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogSetName.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogSetName.java
@@ -52,16 +52,22 @@ public class RubikDialogSetName extends AppCompatDialogFragment
     {
     super.onStart();
 
-    Window window = getDialog().getWindow();
-    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
-                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
-    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
-
     AlertDialog dialog = (AlertDialog) getDialog();
+
     if (dialog != null)
       {
       Button positiveButton = dialog.getButton(Dialog.BUTTON_POSITIVE);
       positiveButton.setEnabled(false);
+      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);
+        }
       }
     }
 
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogSolved.java b/src/main/java/org/distorted/dialogs/RubikDialogSolved.java
index f530f2c7..ec7a82f4 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogSolved.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogSolved.java
@@ -45,10 +45,17 @@ public class RubikDialogSolved extends AppCompatDialogFragment
     {
     super.onStart();
 
-    Window window = getDialog().getWindow();
-    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
-                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
-    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+    Dialog dialog = getDialog();
+    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);
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogSolverError.java b/src/main/java/org/distorted/dialogs/RubikDialogSolverError.java
index 3b884ce6..6ce94a17 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogSolverError.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogSolverError.java
@@ -43,10 +43,17 @@ public class RubikDialogSolverError extends AppCompatDialogFragment
     {
     super.onStart();
 
-    Window window = getDialog().getWindow();
-    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
-                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
-    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+    Dialog dialog = getDialog();
+    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);
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
