diff --git a/app/src/main/java/com/limelight/AppView.java b/app/src/main/java/com/limelight/AppView.java index ce5e85c3..9c4a8564 100644 --- a/app/src/main/java/com/limelight/AppView.java +++ b/app/src/main/java/com/limelight/AppView.java @@ -560,6 +560,7 @@ public class AppView extends Activity implements AdapterFragmentCallbacks { } } }); + UiHelper.applyStatusBarPadding(listView); registerForContextMenu(listView); listView.requestFocus(); } diff --git a/app/src/main/java/com/limelight/PcView.java b/app/src/main/java/com/limelight/PcView.java index d52f8fa8..c532f879 100644 --- a/app/src/main/java/com/limelight/PcView.java +++ b/app/src/main/java/com/limelight/PcView.java @@ -716,6 +716,7 @@ public class PcView extends Activity implements AdapterFragmentCallbacks { } } }); + UiHelper.applyStatusBarPadding(listView); registerForContextMenu(listView); } diff --git a/app/src/main/java/com/limelight/preferences/StreamSettings.java b/app/src/main/java/com/limelight/preferences/StreamSettings.java index d2f290a2..3561962f 100644 --- a/app/src/main/java/com/limelight/preferences/StreamSettings.java +++ b/app/src/main/java/com/limelight/preferences/StreamSettings.java @@ -15,6 +15,9 @@ import android.preference.PreferenceManager; import android.preference.PreferenceScreen; import android.util.Range; import android.view.Display; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; import com.limelight.LimeLog; import com.limelight.PcView; @@ -121,9 +124,17 @@ public class StreamSettings extends Activity { .apply(); } + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = super.onCreateView(inflater, container, savedInstanceState); + UiHelper.applyStatusBarPadding(view); + return view; + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.preferences); PreferenceScreen screen = getPreferenceScreen(); diff --git a/app/src/main/java/com/limelight/utils/UiHelper.java b/app/src/main/java/com/limelight/utils/UiHelper.java index 4afdd39d..572c47e1 100644 --- a/app/src/main/java/com/limelight/utils/UiHelper.java +++ b/app/src/main/java/com/limelight/utils/UiHelper.java @@ -5,6 +5,7 @@ import android.app.AlertDialog; import android.content.DialogInterface; import android.content.SharedPreferences; import android.content.res.Configuration; +import android.graphics.Insets; import android.os.Build; import android.view.View; import android.view.WindowInsets; @@ -40,7 +41,24 @@ public class UiHelper { } } - public static void notifyNewRootView(Activity activity) + public static void applyStatusBarPadding(View view) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + // This applies the padding that we omitted in notifyNewRootView() on Q + view.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { + @Override + public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) { + view.setPadding(view.getPaddingLeft(), + view.getPaddingTop(), + view.getPaddingRight(), + windowInsets.getTappableElementInsets().bottom); + return windowInsets; + } + }); + view.requestApplyInsets(); + } + } + + public static void notifyNewRootView(final Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { // Allow this non-streaming activity to layout under notches. @@ -55,13 +73,25 @@ public class UiHelper { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // Draw under the status bar on Android Q devices - activity.getWindow().getDecorView().setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { + // Using getDecorView() here breaks the translucent status/navigation bar when gestures are disabled + activity.findViewById(android.R.id.content).setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) { - view.setPadding(windowInsets.getSystemWindowInsetLeft(), - windowInsets.getSystemWindowInsetTop(), - windowInsets.getSystemWindowInsetRight(), + // Use the tappable insets so we can draw under the status bar in gesture mode + Insets tappableInsets = windowInsets.getTappableElementInsets(); + view.setPadding(tappableInsets.left, + tappableInsets.top, + tappableInsets.right, 0); + + // Show a translucent navigation bar if we can't tap there + if (tappableInsets.bottom != 0) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); + } + else { + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); + } + return windowInsets; } }); diff --git a/app/src/main/res/layout/activity_pc_view.xml b/app/src/main/res/layout/activity_pc_view.xml index e58f474c..a077e439 100644 --- a/app/src/main/res/layout/activity_pc_view.xml +++ b/app/src/main/res/layout/activity_pc_view.xml @@ -3,9 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingLeft="@dimen/activity_horizontal_margin" - android:paddingRight="@dimen/activity_horizontal_margin" - android:paddingTop="@dimen/activity_vertical_margin" tools:context=".PcView" > diff --git a/app/src/main/res/layout/app_grid_view.xml b/app/src/main/res/layout/app_grid_view.xml index f2e91bae..c994fa07 100644 --- a/app/src/main/res/layout/app_grid_view.xml +++ b/app/src/main/res/layout/app_grid_view.xml @@ -8,4 +8,5 @@ android:stretchMode="spacingWidthUniform" android:focusable="true" android:focusableInTouchMode="true" + android:clipToPadding="false" android:gravity="center"/> \ No newline at end of file diff --git a/app/src/main/res/layout/app_grid_view_small.xml b/app/src/main/res/layout/app_grid_view_small.xml index 0415bb7e..423b7065 100644 --- a/app/src/main/res/layout/app_grid_view_small.xml +++ b/app/src/main/res/layout/app_grid_view_small.xml @@ -8,4 +8,5 @@ android:stretchMode="spacingWidthUniform" android:focusable="true" android:focusableInTouchMode="true" + android:clipToPadding="false" android:gravity="center"/> \ No newline at end of file diff --git a/app/src/main/res/layout/list_view.xml b/app/src/main/res/layout/list_view.xml index 06b044df..fd98c76c 100644 --- a/app/src/main/res/layout/list_view.xml +++ b/app/src/main/res/layout/list_view.xml @@ -1,19 +1,11 @@ - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/pc_grid_view.xml b/app/src/main/res/layout/pc_grid_view.xml index ee16f65b..5e5fc5cb 100644 --- a/app/src/main/res/layout/pc_grid_view.xml +++ b/app/src/main/res/layout/pc_grid_view.xml @@ -9,4 +9,5 @@ android:focusable="true" android:focusableInTouchMode="true" android:nextFocusLeft="@id/settingsButton" + android:clipToPadding="false" android:gravity="center"/> \ No newline at end of file diff --git a/app/src/main/res/layout/pc_grid_view_small.xml b/app/src/main/res/layout/pc_grid_view_small.xml index b385067a..d91c9e9c 100644 --- a/app/src/main/res/layout/pc_grid_view_small.xml +++ b/app/src/main/res/layout/pc_grid_view_small.xml @@ -9,4 +9,5 @@ android:focusable="true" android:focusableInTouchMode="true" android:nextFocusLeft="@id/settingsButton" + android:clipToPadding="false" android:gravity="center"/> \ No newline at end of file