From c5dba34afee4f4eeb7f9f4ae5a0f37584657817a Mon Sep 17 00:00:00 2001 From: CDrummond Date: Sat, 10 Aug 2024 10:32:06 +0100 Subject: [PATCH] Don't allow fullscreen option on devices with top-left camera cutout. --- .../metadata/android/en-US/changelogs/603.txt | 6 +++++- .../craigd/lmsmaterial/app/MainActivity.java | 4 +++- .../lmsmaterial/app/SettingsActivity.java | 11 ++++++++++- .../com/craigd/lmsmaterial/app/Utils.java | 19 ++++++++++++++++++- 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/fastlane/metadata/android/en-US/changelogs/603.txt b/fastlane/metadata/android/en-US/changelogs/603.txt index 82d2991..c9d4178 100644 --- a/fastlane/metadata/android/en-US/changelogs/603.txt +++ b/fastlane/metadata/android/en-US/changelogs/603.txt @@ -1,4 +1,8 @@ -Fixed +Improved • Use WindowInsets to calculate top and bottom padding required. + +Fixed + • Fix starting Squeezelite (via Termux) +• Don't allow fullscreen option on devices with top-left camera cutout. diff --git a/lms-material/src/main/java/com/craigd/lmsmaterial/app/MainActivity.java b/lms-material/src/main/java/com/craigd/lmsmaterial/app/MainActivity.java index 2cc50c6..84afc24 100644 --- a/lms-material/src/main/java/com/craigd/lmsmaterial/app/MainActivity.java +++ b/lms-material/src/main/java/com/craigd/lmsmaterial/app/MainActivity.java @@ -297,6 +297,7 @@ private String getConfiguredUrl() { if (scale<5) { adjust += (5-scale)/10.0; } + Utils.cutoutTopLeft(this); builder.appendQueryParameter("topPad", ""+(int) Math.ceil(Utils.getTopPadding(this)*adjust)); builder.appendQueryParameter("botPad", ""+(int)Math.ceil(Utils.getBottomPadding(this)*adjust)); if (!Utils.usingGestureNavigation(this)) { @@ -339,7 +340,8 @@ private void setDefaults() { editor.putBoolean(SettingsActivity.KEEP_SCREEN_ON_PREF_KEY, false); modified=true; } - if (!sharedPreferences.contains(SettingsActivity.FULLSCREEN_PREF_KEY)) { + if (!sharedPreferences.contains(SettingsActivity.FULLSCREEN_PREF_KEY) || + (sharedPreferences.getBoolean(SettingsActivity.FULLSCREEN_PREF_KEY, false) && Utils.cutoutTopLeft(this))) { editor.putBoolean(SettingsActivity.FULLSCREEN_PREF_KEY, false); modified=true; } diff --git a/lms-material/src/main/java/com/craigd/lmsmaterial/app/SettingsActivity.java b/lms-material/src/main/java/com/craigd/lmsmaterial/app/SettingsActivity.java index da7d426..598ebca 100644 --- a/lms-material/src/main/java/com/craigd/lmsmaterial/app/SettingsActivity.java +++ b/lms-material/src/main/java/com/craigd/lmsmaterial/app/SettingsActivity.java @@ -73,6 +73,7 @@ public static boolean isVisible() { } private SettingsFragment fragment; + private SettingsActivity activity; @Override protected void onCreate(Bundle savedInstanceState) { @@ -86,6 +87,7 @@ protected void onCreate(Bundle savedInstanceState) { visible = true; setContentView(R.layout.settings_activity); + activity = this; fragment = new SettingsFragment(); fragment.setActivity(this); getSupportFragmentManager() @@ -268,7 +270,7 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { }); } - final Preference defaultPlayerButton = getPreferenceManager().findPreference("default_player"); + final Preference defaultPlayerButton = getPreferenceManager().findPreference(DEFAULT_PLAYER_PREF_KEY); if (defaultPlayerButton != null) { String defaultPlayer = sharedPreferences.getString(DEFAULT_PLAYER_PREF_KEY, null); if (defaultPlayer!=null && !defaultPlayer.isEmpty()) { @@ -387,6 +389,13 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { } } + if (Utils.cutoutTopLeft(activity)) { + SwitchPreferenceCompat fullscreenPref = getPreferenceManager().findPreference("fullscreen"); + if (null != fullscreenPref) { + fullscreenPref.setVisible(false); + } + } + updateListSummary(ORIENTATION_PREF_KEY); updateListSummary(ON_CALL_PREF_KEY); updateListSummary(PLAYER_APP_PREF_KEY); diff --git a/lms-material/src/main/java/com/craigd/lmsmaterial/app/Utils.java b/lms-material/src/main/java/com/craigd/lmsmaterial/app/Utils.java index b3368e6..2c84a05 100644 --- a/lms-material/src/main/java/com/craigd/lmsmaterial/app/Utils.java +++ b/lms-material/src/main/java/com/craigd/lmsmaterial/app/Utils.java @@ -15,16 +15,18 @@ import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.Insets; +import android.graphics.Rect; import android.os.Build; import android.util.DisplayMetrics; import android.util.Log; import android.view.DisplayCutout; -import android.view.Window; import android.view.WindowInsets; import androidx.core.app.ActivityCompat; import androidx.core.app.NotificationManagerCompat; +import java.util.List; + public class Utils { public static final String LOG_TAG = "LMS"; @@ -32,6 +34,21 @@ public static float convertPixelsToDp(float px, Context context){ return px / ((float) context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT); } + public static boolean cutoutTopLeft(Activity activity) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + DisplayCutout displayCutout = activity.getWindowManager().getDefaultDisplay().getCutout(); + if (null != displayCutout) { + List rects = displayCutout.getBoundingRects(); + for (Rect rect : rects) { + if (rect.left >= 0 && rect.left <= 10 && rect.width() > 100 && rect.width()<300) { + return true; + } + } + } + } + return false; + } + public static boolean usingGestureNavigation(Activity activity) { Resources resources = activity.getResources(); @SuppressLint("DiscouragedApi") int resourceId = resources.getIdentifier("config_navBarInteractionMode", "integer", "android");