Android: don't pass Activity to some QtDisplayManager methods
Since the display manager is mainly created by the Activity delegate and lives with it, so pass the Actitivy and use it internally, instead of passing it to every method. Task-number: QTBUG-118077 Change-Id: I7761490ac8746cc6dad3bd59514a54da18519990 Reviewed-by: Tinja Paavoseppä <tinja.paavoseppa@qt.io>bb10
parent
43102fb55f
commit
576be5d047
|
|
@ -130,7 +130,7 @@ public class QtActivityBase extends Activity
|
|||
if (QtNative.getStateDetails().isStarted) {
|
||||
QtNative.updateWindow();
|
||||
// Suspending the app clears the immersive mode, so we need to set it again.
|
||||
m_delegate.displayManager().updateFullScreen(this);
|
||||
m_delegate.displayManager().updateFullScreen();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -257,7 +257,7 @@ public class QtActivityBase extends Activity
|
|||
super.onRestoreInstanceState(savedInstanceState);
|
||||
QtNative.setStarted(savedInstanceState.getBoolean("Started"));
|
||||
int savedSystemUiVisibility = savedInstanceState.getInt("SystemUiVisibility");
|
||||
m_delegate.displayManager().setSystemUiVisibility(this, savedSystemUiVisibility);
|
||||
m_delegate.displayManager().setSystemUiVisibility(savedSystemUiVisibility);
|
||||
// FIXME restore all surfaces
|
||||
}
|
||||
|
||||
|
|
@ -282,7 +282,7 @@ public class QtActivityBase extends Activity
|
|||
{
|
||||
super.onWindowFocusChanged(hasFocus);
|
||||
if (hasFocus)
|
||||
m_delegate.displayManager().updateFullScreen(this);
|
||||
m_delegate.displayManager().updateFullScreen();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -47,9 +47,9 @@ public class QtActivityDelegate
|
|||
private View m_dummyView = null;
|
||||
|
||||
private QtAccessibilityDelegate m_accessibilityDelegate = null;
|
||||
private final QtDisplayManager m_displayManager = new QtDisplayManager();
|
||||
private QtDisplayManager m_displayManager = null;
|
||||
|
||||
private final QtInputDelegate m_inputDelegate;
|
||||
private QtInputDelegate m_inputDelegate = null;
|
||||
|
||||
QtActivityDelegate(Activity activity)
|
||||
{
|
||||
|
|
@ -57,18 +57,6 @@ public class QtActivityDelegate
|
|||
QtNative.setActivity(m_activity);
|
||||
|
||||
setActionBarVisibility(false);
|
||||
|
||||
QtInputDelegate.KeyboardVisibilityListener keyboardVisibilityListener =
|
||||
() -> m_displayManager.updateFullScreen(m_activity);
|
||||
m_inputDelegate = new QtInputDelegate(m_activity, keyboardVisibilityListener);
|
||||
|
||||
try {
|
||||
PackageManager pm = m_activity.getPackageManager();
|
||||
ActivityInfo activityInfo = pm.getActivityInfo(m_activity.getComponentName(), 0);
|
||||
m_inputDelegate.setSoftInputMode(activityInfo.softInputMode);
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
QtDisplayManager displayManager() {
|
||||
|
|
@ -90,7 +78,7 @@ public class QtActivityDelegate
|
|||
public void setSystemUiVisibility(int systemUiVisibility)
|
||||
{
|
||||
QtNative.runAction(() -> {
|
||||
m_displayManager.setSystemUiVisibility(m_activity, systemUiVisibility);
|
||||
m_displayManager.setSystemUiVisibility(systemUiVisibility);
|
||||
m_layout.requestLayout();
|
||||
QtNative.updateWindow();
|
||||
});
|
||||
|
|
@ -149,7 +137,20 @@ public class QtActivityDelegate
|
|||
{
|
||||
m_layout = new QtLayout(m_activity);
|
||||
|
||||
m_displayManager.registerDisplayListener(m_activity, m_layout);
|
||||
m_displayManager = new QtDisplayManager(m_activity, m_layout);
|
||||
m_displayManager.registerDisplayListener();
|
||||
|
||||
QtInputDelegate.KeyboardVisibilityListener keyboardVisibilityListener =
|
||||
() -> m_displayManager.updateFullScreen();
|
||||
m_inputDelegate = new QtInputDelegate(m_activity, keyboardVisibilityListener);
|
||||
|
||||
try {
|
||||
PackageManager pm = m_activity.getPackageManager();
|
||||
ActivityInfo activityInfo = pm.getActivityInfo(m_activity.getComponentName(), 0);
|
||||
m_inputDelegate.setSoftInputMode(activityInfo.softInputMode);
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
int orientation = m_activity.getResources().getConfiguration().orientation;
|
||||
|
||||
|
|
|
|||
|
|
@ -44,21 +44,23 @@ public class QtDisplayManager {
|
|||
public static final int SYSTEM_UI_VISIBILITY_TRANSLUCENT = 2;
|
||||
private int m_systemUiVisibility = SYSTEM_UI_VISIBILITY_NORMAL;
|
||||
|
||||
// FIXME: some methods here make more sense as non-static, fix that
|
||||
QtDisplayManager() {}
|
||||
private DisplayManager.DisplayListener m_displayListener = null;
|
||||
private final Activity m_activity;
|
||||
|
||||
// TODO: unregister the listener upon activity destruction as well
|
||||
public void registerDisplayListener(Activity activity, QtLayout layout)
|
||||
QtDisplayManager(Activity activity, QtLayout layout)
|
||||
{
|
||||
DisplayManager.DisplayListener displayListener = new DisplayManager.DisplayListener()
|
||||
{
|
||||
m_activity = activity;
|
||||
initDisplayListener(layout);
|
||||
}
|
||||
|
||||
private void initDisplayListener(QtLayout layout) {
|
||||
m_displayListener = new DisplayManager.DisplayListener() {
|
||||
@Override
|
||||
public void onDisplayAdded(int displayId) {
|
||||
QtDisplayManager.handleScreenAdded(displayId);
|
||||
}
|
||||
|
||||
private boolean isSimilarRotation(int r1, int r2)
|
||||
{
|
||||
private boolean isSimilarRotation(int r1, int r2) {
|
||||
return (r1 == r2)
|
||||
|| (r1 == Surface.ROTATION_0 && r2 == Surface.ROTATION_180)
|
||||
|| (r1 == Surface.ROTATION_180 && r2 == Surface.ROTATION_0)
|
||||
|
|
@ -67,11 +69,10 @@ public class QtDisplayManager {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onDisplayChanged(int displayId)
|
||||
{
|
||||
public void onDisplayChanged(int displayId) {
|
||||
Display display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R)
|
||||
? activity.getWindowManager().getDefaultDisplay()
|
||||
: activity.getDisplay();
|
||||
? m_activity.getWindowManager().getDefaultDisplay()
|
||||
: m_activity.getDisplay();
|
||||
int rotation = display.getRotation();
|
||||
layout.setActivityDisplayRotation(rotation);
|
||||
// Process orientation change only if it comes after the size
|
||||
|
|
@ -79,7 +80,7 @@ public class QtDisplayManager {
|
|||
// Otherwise it will be processed in QtLayout.
|
||||
if (isSimilarRotation(rotation, layout.displayRotation())) {
|
||||
QtDisplayManager.handleOrientationChanged(rotation,
|
||||
getNativeOrientation(activity, rotation));
|
||||
getNativeOrientation(m_activity, rotation));
|
||||
}
|
||||
|
||||
float refreshRate = display.getRefreshRate();
|
||||
|
|
@ -92,9 +93,14 @@ public class QtDisplayManager {
|
|||
QtDisplayManager.handleScreenRemoved(displayId);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
DisplayManager displayManager = (DisplayManager) activity.getSystemService(Context.DISPLAY_SERVICE);
|
||||
displayManager.registerDisplayListener(displayListener, null);
|
||||
// TODO: unregister the listener upon activity destruction as well
|
||||
public void registerDisplayListener()
|
||||
{
|
||||
DisplayManager displayManager =
|
||||
(DisplayManager) m_activity.getSystemService(Context.DISPLAY_SERVICE);
|
||||
displayManager.registerDisplayListener(m_displayListener, null);
|
||||
}
|
||||
|
||||
public static int getNativeOrientation(Activity activity, int rotation)
|
||||
|
|
@ -112,9 +118,8 @@ public class QtDisplayManager {
|
|||
return nativeOrientation;
|
||||
}
|
||||
|
||||
public void setSystemUiVisibility(Activity activity, int systemUiVisibility)
|
||||
public void setSystemUiVisibility(int systemUiVisibility)
|
||||
{
|
||||
|
||||
if (m_systemUiVisibility == systemUiVisibility)
|
||||
return;
|
||||
|
||||
|
|
@ -123,16 +128,16 @@ public class QtDisplayManager {
|
|||
int systemUiVisibilityFlags = View.SYSTEM_UI_FLAG_VISIBLE;
|
||||
switch (m_systemUiVisibility) {
|
||||
case SYSTEM_UI_VISIBILITY_NORMAL:
|
||||
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
||||
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||
m_activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
||||
m_activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
activity.getWindow().getAttributes().layoutInDisplayCutoutMode =
|
||||
m_activity.getWindow().getAttributes().layoutInDisplayCutoutMode =
|
||||
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
|
||||
}
|
||||
break;
|
||||
case SYSTEM_UI_VISIBILITY_FULLSCREEN:
|
||||
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
||||
m_activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||
m_activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
||||
systemUiVisibilityFlags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
||||
|
|
@ -141,22 +146,22 @@ public class QtDisplayManager {
|
|||
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
|
||||
| View.INVISIBLE;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
activity.getWindow().getAttributes().layoutInDisplayCutoutMode =
|
||||
m_activity.getWindow().getAttributes().layoutInDisplayCutoutMode =
|
||||
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
|
||||
}
|
||||
break;
|
||||
case SYSTEM_UI_VISIBILITY_TRANSLUCENT:
|
||||
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN
|
||||
m_activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN
|
||||
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
|
||||
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
|
||||
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||
m_activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
activity.getWindow().getAttributes().layoutInDisplayCutoutMode =
|
||||
m_activity.getWindow().getAttributes().layoutInDisplayCutoutMode =
|
||||
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
|
||||
}
|
||||
break;
|
||||
}
|
||||
activity.getWindow().getDecorView().setSystemUiVisibility(systemUiVisibilityFlags);
|
||||
m_activity.getWindow().getDecorView().setSystemUiVisibility(systemUiVisibilityFlags);
|
||||
}
|
||||
|
||||
public int systemUiVisibility()
|
||||
|
|
@ -164,11 +169,11 @@ public class QtDisplayManager {
|
|||
return m_systemUiVisibility;
|
||||
}
|
||||
|
||||
public void updateFullScreen(Activity activity)
|
||||
public void updateFullScreen()
|
||||
{
|
||||
if (m_systemUiVisibility == SYSTEM_UI_VISIBILITY_FULLSCREEN) {
|
||||
m_systemUiVisibility = SYSTEM_UI_VISIBILITY_NORMAL;
|
||||
setSystemUiVisibility(activity, SYSTEM_UI_VISIBILITY_FULLSCREEN);
|
||||
setSystemUiVisibility(SYSTEM_UI_VISIBILITY_FULLSCREEN);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue