Android: unregister display manager on onPause or onStop

Unregister the display manager listener onPause or onStop
and register again when onResume is called.

Task-number: QTBUG-118077
Change-Id: Ic48defda019fb132ef22a8229c4b549b0414b100
Reviewed-by: Tinja Paavoseppä <tinja.paavoseppa@qt.io>
This commit is contained in:
Assam Boudjelthia 2023-11-22 15:39:25 +02:00
parent 576be5d047
commit a419d4fbf0
2 changed files with 9 additions and 1 deletions

View File

@ -120,6 +120,7 @@ public class QtActivityBase extends Activity
super.onPause(); super.onPause();
if (Build.VERSION.SDK_INT < 24 || !isInMultiWindowMode()) if (Build.VERSION.SDK_INT < 24 || !isInMultiWindowMode())
QtNative.setApplicationState(QtNative.ApplicationState.ApplicationInactive); QtNative.setApplicationState(QtNative.ApplicationState.ApplicationInactive);
m_delegate.displayManager().unregisterDisplayListener();
} }
@Override @Override
@ -128,6 +129,7 @@ public class QtActivityBase extends Activity
super.onResume(); super.onResume();
QtNative.setApplicationState(QtNative.ApplicationState.ApplicationActive); QtNative.setApplicationState(QtNative.ApplicationState.ApplicationActive);
if (QtNative.getStateDetails().isStarted) { if (QtNative.getStateDetails().isStarted) {
m_delegate.displayManager().registerDisplayListener();
QtNative.updateWindow(); QtNative.updateWindow();
// Suspending the app clears the immersive mode, so we need to set it again. // Suspending the app clears the immersive mode, so we need to set it again.
m_delegate.displayManager().updateFullScreen(); m_delegate.displayManager().updateFullScreen();

View File

@ -95,7 +95,6 @@ public class QtDisplayManager {
}; };
} }
// TODO: unregister the listener upon activity destruction as well
public void registerDisplayListener() public void registerDisplayListener()
{ {
DisplayManager displayManager = DisplayManager displayManager =
@ -103,6 +102,13 @@ public class QtDisplayManager {
displayManager.registerDisplayListener(m_displayListener, null); displayManager.registerDisplayListener(m_displayListener, null);
} }
public void unregisterDisplayListener()
{
DisplayManager displayManager =
(DisplayManager) m_activity.getSystemService(Context.DISPLAY_SERVICE);
displayManager.unregisterDisplayListener(m_displayListener);
}
public static int getNativeOrientation(Activity activity, int rotation) public static int getNativeOrientation(Activity activity, int rotation)
{ {
int nativeOrientation; int nativeOrientation;