Fallback to default display if initial one is detached

Test: presubmit
Fixes: 285630617
Change-Id: I196bab294c182230edda54241f7b725f44f05570
This commit is contained in:
Charles Chen
2023-06-06 14:37:08 +08:00
parent 7e0bed1b38
commit 7d860098f5

View File

@@ -34,6 +34,7 @@ import android.content.res.Configuration;
import android.hardware.display.DisplayManager;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.Display;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams.WindowType;
@@ -52,6 +53,8 @@ import android.view.WindowManagerImpl;
@UiContext
public abstract class WindowProviderService extends Service implements WindowProvider {
private static final String TAG = WindowProviderService.class.getSimpleName();
private final Bundle mOptions;
private final WindowTokenClient mWindowToken = new WindowTokenClient();
private final WindowContextController mController = new WindowContextController(mWindowToken);
@@ -194,8 +197,16 @@ public abstract class WindowProviderService extends Service implements WindowPro
public final Context createServiceBaseContext(ActivityThread mainThread,
LoadedApk packageInfo) {
final Context context = super.createServiceBaseContext(mainThread, packageInfo);
final Display display = context.getSystemService(DisplayManager.class)
.getDisplay(getInitialDisplayId());
final DisplayManager displayManager = context.getSystemService(DisplayManager.class);
final int initialDisplayId = getInitialDisplayId();
Display display = displayManager.getDisplay(initialDisplayId);
// Fallback to use the default display if the initial display to start WindowProviderService
// is detached.
if (display == null) {
Log.e(TAG, "Display with id " + initialDisplayId + " not found, falling back to "
+ "DEFAULT_DISPLAY");
display = displayManager.getDisplay(DEFAULT_DISPLAY);
}
return context.createTokenContext(mWindowToken, display);
}