From 2e87a652a47b34a47aa87f633dbe8fafdb26bf8f Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 3 Dec 2017 19:18:27 -0800 Subject: [PATCH] Android: Reset immersive after native dialogs. Not sure why it only happens on OpenGL, but it implies we need to reset the state after the alert is dismissed. Fixes #10177. --- .../src/org/ppsspp/ppsspp/NativeActivity.java | 48 ++++++++++++++----- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/android/src/org/ppsspp/ppsspp/NativeActivity.java b/android/src/org/ppsspp/ppsspp/NativeActivity.java index a9b542e1c7..9901f57cd6 100644 --- a/android/src/org/ppsspp/ppsspp/NativeActivity.java +++ b/android/src/org/ppsspp/ppsspp/NativeActivity.java @@ -1006,18 +1006,38 @@ public abstract class NativeActivity extends Activity implements SurfaceHolder.C @TargetApi(11) @SuppressWarnings("deprecation") private AlertDialog.Builder createDialogBuilderWithTheme() { - return new AlertDialog.Builder(this, AlertDialog.THEME_HOLO_DARK); + return new AlertDialog.Builder(this, AlertDialog.THEME_HOLO_DARK); } @TargetApi(14) @SuppressWarnings("deprecation") private AlertDialog.Builder createDialogBuilderWithDeviceTheme() { - return new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK); + return new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK); + } + + @TargetApi(17) + @SuppressWarnings("deprecation") + private AlertDialog.Builder createDialogBuilderWithDeviceThemeAndUiVisibility() { + AlertDialog.Builder bld = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK); + bld.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + updateSystemUiVisibility(); + } + }); + return bld; } @TargetApi(23) private AlertDialog.Builder createDialogBuilderNew() { - return new AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Dialog_Alert); + AlertDialog.Builder bld = new AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Dialog_Alert); + bld.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + updateSystemUiVisibility(); + } + }); + return bld; } // The return value is sent elsewhere. TODO in java, in SendMessage in C++. @@ -1034,16 +1054,18 @@ public abstract class NativeActivity extends Activity implements SurfaceHolder.C input.setText(defaultText); input.selectAll(); - // Lovely! - AlertDialog.Builder bld; - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) - bld = new AlertDialog.Builder(this); - else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) - bld = createDialogBuilderWithTheme(); - else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) - bld = createDialogBuilderWithDeviceTheme(); - else - bld = createDialogBuilderNew(); + // Lovely! + AlertDialog.Builder bld; + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) + bld = new AlertDialog.Builder(this); + else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) + bld = createDialogBuilderWithTheme(); + else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) + bld = createDialogBuilderWithDeviceTheme(); + else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) + bld = createDialogBuilderWithDeviceThemeAndUiVisibility(); + else + bld = createDialogBuilderNew(); AlertDialog dlg = bld .setView(fl)