commit ed0ea1c5081e13cffde0759a9820ce5d5d74043f
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Apr 4 15:31:51 2023 +0200

    Move the OSInterface to a separate module

diff --git a/build.gradle b/build.gradle
index 85d3ff5d..13960bae 100644
--- a/build.gradle
+++ b/build.gradle
@@ -55,4 +55,5 @@ dependencies {
     implementation "com.android.billingclient:billing:5.1.0"
     implementation project(path: ':distorted-puzzle-jsons')
     implementation project(path: ':distorted-puzzle-dmesh')
+    implementation project(path: ':distorted-os-android')
 }
diff --git a/src/main/java/org/distorted/bandaged/BandagedOSInterface.java b/src/main/java/org/distorted/bandaged/BandagedOSInterface.java
deleted file mode 100644
index ba5ce8f2..00000000
--- a/src/main/java/org/distorted/bandaged/BandagedOSInterface.java
+++ /dev/null
@@ -1,39 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Copyright 2023 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.bandaged;
-
-import android.util.DisplayMetrics;
-
-import org.distorted.objectlib.helpers.OperatingSystemInterface;
-
-import java.lang.ref.WeakReference;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-public class BandagedOSInterface implements OperatingSystemInterface
-{
-  private final WeakReference<BandagedPlayActivity> mAct;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  BandagedOSInterface(BandagedPlayActivity act)
-    {
-    mAct = new WeakReference<>(act);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public int getScreenDensity()
-    {
-    DisplayMetrics dm = new DisplayMetrics();
-    mAct.get().getWindowManager().getDefaultDisplay().getMetrics(dm);
-    return dm.densityDpi;
-    }
-}
diff --git a/src/main/java/org/distorted/bandaged/BandagedPlayView.java b/src/main/java/org/distorted/bandaged/BandagedPlayView.java
index c8529f2f..d9ccbf87 100644
--- a/src/main/java/org/distorted/bandaged/BandagedPlayView.java
+++ b/src/main/java/org/distorted/bandaged/BandagedPlayView.java
@@ -22,6 +22,7 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics;
 
 import org.distorted.objectlib.main.ObjectControl;
 import org.distorted.objectlib.main.TwistyObjectNode;
+import org.distorted.os.OSInterface;
 
 import static org.distorted.objectlib.main.ObjectControl.MODE_ROTATE;
 
@@ -30,7 +31,7 @@ import static org.distorted.objectlib.main.ObjectControl.MODE_ROTATE;
 public class BandagedPlayView extends GLSurfaceView
 {
     private ObjectControl mObjectController;
-    private BandagedOSInterface mInterface;
+    private OSInterface mInterface;
     private BandagedPlayRenderer mRenderer;
     private int mScreenWidth, mScreenHeight;
     private boolean mCreated;
@@ -81,7 +82,7 @@ public class BandagedPlayView extends GLSurfaceView
         {
         BandagedPlayActivity act = (BandagedPlayActivity)context;
         BandagedPlayLibInterface ref = new BandagedPlayLibInterface(act);
-        mInterface = new BandagedOSInterface(act);
+        mInterface = new OSInterface(act);
         mObjectController = new ObjectControl(ref,mInterface);
         mObjectController.setRotateOnCreation(true);
         mRenderer = new BandagedPlayRenderer(this);
diff --git a/src/main/java/org/distorted/config/ConfigOSInterface.java b/src/main/java/org/distorted/config/ConfigOSInterface.java
deleted file mode 100644
index b752860e..00000000
--- a/src/main/java/org/distorted/config/ConfigOSInterface.java
+++ /dev/null
@@ -1,39 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Copyright 2023 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.config;
-
-import android.util.DisplayMetrics;
-
-import org.distorted.objectlib.helpers.OperatingSystemInterface;
-
-import java.lang.ref.WeakReference;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-public class ConfigOSInterface implements OperatingSystemInterface
-{
-  private final WeakReference<ConfigActivity> mAct;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  ConfigOSInterface(ConfigActivity act)
-    {
-    mAct = new WeakReference<>(act);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public int getScreenDensity()
-    {
-    DisplayMetrics dm = new DisplayMetrics();
-    mAct.get().getWindowManager().getDefaultDisplay().getMetrics(dm);
-    return dm.densityDpi;
-    }
-}
diff --git a/src/main/java/org/distorted/config/ConfigSurfaceView.java b/src/main/java/org/distorted/config/ConfigSurfaceView.java
index dd2eba35..c2596bec 100644
--- a/src/main/java/org/distorted/config/ConfigSurfaceView.java
+++ b/src/main/java/org/distorted/config/ConfigSurfaceView.java
@@ -20,13 +20,14 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics;
 
 import org.distorted.objectlib.main.ObjectControl;
 import org.distorted.objectlib.main.TwistyObjectNode;
+import org.distorted.os.OSInterface;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public class ConfigSurfaceView extends GLSurfaceView
 {
     private ObjectControl mObjectController;
-    private ConfigOSInterface mInterface;
+    private OSInterface mInterface;
     private ConfigRenderer mRenderer;
     private int mScreenWidth, mScreenHeight;
     private boolean mCreated;
@@ -77,7 +78,7 @@ public class ConfigSurfaceView extends GLSurfaceView
         {
         ConfigActivity act = (ConfigActivity)context;
         ConfigObjectLibInterface ref = new ConfigObjectLibInterface();
-        mInterface = new ConfigOSInterface(act);
+        mInterface = new OSInterface(act);
         mObjectController = new ObjectControl(ref,mInterface);
         mObjectController.setRotateOnCreation(true);
         mRenderer = new ConfigRenderer(this);
diff --git a/src/main/java/org/distorted/main/RubikOSInterface.java b/src/main/java/org/distorted/main/RubikOSInterface.java
deleted file mode 100644
index d76d4122..00000000
--- a/src/main/java/org/distorted/main/RubikOSInterface.java
+++ /dev/null
@@ -1,39 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Copyright 2023 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.main;
-
-import android.util.DisplayMetrics;
-
-import org.distorted.objectlib.helpers.OperatingSystemInterface;
-
-import java.lang.ref.WeakReference;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-public class RubikOSInterface implements OperatingSystemInterface
-{
-  private final WeakReference<RubikActivity> mAct;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  RubikOSInterface(RubikActivity act)
-    {
-    mAct = new WeakReference<>(act);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public int getScreenDensity()
-    {
-    DisplayMetrics dm = new DisplayMetrics();
-    mAct.get().getWindowManager().getDefaultDisplay().getMetrics(dm);
-    return dm.densityDpi;
-    }
-}
diff --git a/src/main/java/org/distorted/main/RubikSurfaceView.java b/src/main/java/org/distorted/main/RubikSurfaceView.java
index 6d389650..c7b5543f 100644
--- a/src/main/java/org/distorted/main/RubikSurfaceView.java
+++ b/src/main/java/org/distorted/main/RubikSurfaceView.java
@@ -24,6 +24,7 @@ import org.distorted.external.RubikScores;
 import org.distorted.library.main.DistortedScreen;
 import org.distorted.objectlib.main.ObjectControl;
 import org.distorted.objectlib.main.TwistyObjectNode;
+import org.distorted.os.OSInterface;
 import org.distorted.overlays.DataStars;
 import org.distorted.overlays.OverlayStars;
 import org.distorted.screens.ScreenList;
@@ -33,7 +34,7 @@ import org.distorted.screens.ScreenList;
 public class RubikSurfaceView extends GLSurfaceView
 {
     private ObjectControl mObjectController;
-    private RubikOSInterface mInterface;
+    private OSInterface mInterface;
     private RubikRenderer mRenderer;
     private int mScreenWidth, mScreenHeight;
     private boolean mCreated;
@@ -112,7 +113,7 @@ public class RubikSurfaceView extends GLSurfaceView
         {
         RubikActivity act = (RubikActivity)context;
         RubikObjectLibInterface ref = new RubikObjectLibInterface(act);
-        mInterface = new RubikOSInterface(act);
+        mInterface = new OSInterface(act);
         mObjectController = new ObjectControl(ref,mInterface);
         mRenderer = new RubikRenderer(this);
 
diff --git a/src/main/java/org/distorted/purchase/PurchaseOSInterface.java b/src/main/java/org/distorted/purchase/PurchaseOSInterface.java
deleted file mode 100644
index 43fb937b..00000000
--- a/src/main/java/org/distorted/purchase/PurchaseOSInterface.java
+++ /dev/null
@@ -1,39 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Copyright 2023 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.purchase;
-
-import android.util.DisplayMetrics;
-
-import org.distorted.objectlib.helpers.OperatingSystemInterface;
-
-import java.lang.ref.WeakReference;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-public class PurchaseOSInterface implements OperatingSystemInterface
-{
-  private final WeakReference<PurchaseActivity> mAct;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  PurchaseOSInterface(PurchaseActivity act)
-    {
-    mAct = new WeakReference<>(act);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public int getScreenDensity()
-    {
-    DisplayMetrics dm = new DisplayMetrics();
-    mAct.get().getWindowManager().getDefaultDisplay().getMetrics(dm);
-    return dm.densityDpi;
-    }
-}
diff --git a/src/main/java/org/distorted/purchase/PurchaseSurfaceView.java b/src/main/java/org/distorted/purchase/PurchaseSurfaceView.java
index 0c4e15e0..23bc545d 100644
--- a/src/main/java/org/distorted/purchase/PurchaseSurfaceView.java
+++ b/src/main/java/org/distorted/purchase/PurchaseSurfaceView.java
@@ -20,13 +20,14 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics;
 
 import org.distorted.objectlib.main.ObjectControl;
 import org.distorted.objectlib.main.TwistyObjectNode;
+import org.distorted.os.OSInterface;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public class PurchaseSurfaceView extends GLSurfaceView
 {
     private ObjectControl mObjectController;
-    private PurchaseOSInterface mInterface;
+    private OSInterface mInterface;
     private PurchaseRenderer mRenderer;
     private boolean mCreated;
 
@@ -74,7 +75,7 @@ public class PurchaseSurfaceView extends GLSurfaceView
         {
         PurchaseActivity act = (PurchaseActivity)context;
         PurchaseObjectLibInterface ref = new PurchaseObjectLibInterface();
-        mInterface = new PurchaseOSInterface(act);
+        mInterface = new OSInterface(act);
         mObjectController = new ObjectControl(ref,mInterface);
         mObjectController.setRotateOnCreation(true);
         mRenderer = new PurchaseRenderer(this);
diff --git a/src/main/java/org/distorted/tutorials/TutorialOSInterface.java b/src/main/java/org/distorted/tutorials/TutorialOSInterface.java
deleted file mode 100644
index b5ee7498..00000000
--- a/src/main/java/org/distorted/tutorials/TutorialOSInterface.java
+++ /dev/null
@@ -1,39 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Copyright 2023 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.tutorials;
-
-import android.util.DisplayMetrics;
-
-import org.distorted.objectlib.helpers.OperatingSystemInterface;
-
-import java.lang.ref.WeakReference;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-public class TutorialOSInterface implements OperatingSystemInterface
-{
-  private final WeakReference<TutorialActivity> mAct;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  TutorialOSInterface(TutorialActivity act)
-    {
-    mAct = new WeakReference<>(act);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public int getScreenDensity()
-    {
-    DisplayMetrics dm = new DisplayMetrics();
-    mAct.get().getWindowManager().getDefaultDisplay().getMetrics(dm);
-    return dm.densityDpi;
-    }
-}
diff --git a/src/main/java/org/distorted/tutorials/TutorialSurfaceView.java b/src/main/java/org/distorted/tutorials/TutorialSurfaceView.java
index 65070274..9317a5f5 100644
--- a/src/main/java/org/distorted/tutorials/TutorialSurfaceView.java
+++ b/src/main/java/org/distorted/tutorials/TutorialSurfaceView.java
@@ -20,6 +20,7 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics;
 
 import org.distorted.objectlib.main.ObjectControl;
 import org.distorted.objectlib.main.TwistyObjectNode;
+import org.distorted.os.OSInterface;
 
 import static org.distorted.objectlib.main.ObjectControl.MODE_ROTATE;
 import static org.distorted.objectlib.main.ObjectControl.MODE_DRAG;
@@ -29,7 +30,7 @@ import static org.distorted.objectlib.main.ObjectControl.MODE_DRAG;
 public class TutorialSurfaceView extends GLSurfaceView
 {
     private ObjectControl mObjectController;
-    private TutorialOSInterface mInterface;
+    private OSInterface mInterface;
     private TutorialRenderer mRenderer;
     private int mScreenWidth, mScreenHeight;
     private boolean mCreated;
@@ -86,7 +87,7 @@ public class TutorialSurfaceView extends GLSurfaceView
         {
         TutorialActivity act = (TutorialActivity)context;
         TutorialObjectLibInterface ref = new TutorialObjectLibInterface(act);
-        mInterface = new TutorialOSInterface(act);
+        mInterface = new OSInterface(act);
         mObjectController = new ObjectControl(ref,mInterface);
         mRenderer = new TutorialRenderer(this);
 
